Windows:找出誰在哪裡登入

Windows:找出誰在哪裡登入
- 哦,對我來說沒什麼用,救命!
- 別擔心,我們現在就會解決所有問題。 給你的電腦名稱...
(從致電到技術支援的經典流派)

如果您有 BgInfo 之類的工具,或者您的用戶了解 Windows+Pause/Break 快捷方式並知道如何按下它,那就太好了。 甚至有一些罕見的標本能夠記住他們的汽車的名字。 但通常呼叫者除了主要問題外,還有第二個問題:找出電腦的名稱/IP 位址。 通常,解決第二個問題比解決第一個問題需要更多的時間(而且您只需要更改桌布或返回遺失的捷徑:)。
但聽到這樣的事情要好得多:
- Tatyana Sergeevna,別擔心,我已經在連結了...


為此你不需要太多。
技術支援專家只需要記住機器的名稱並記住誰為哪台機器工作。
在描述我們目前使用的解決方案之前,我將簡要介紹其他選項,以便我可以徹底批評它們並解釋我的選擇。

  1. 背景信息, 桌面信息 等等。 如果錢多的話,就有付費的。 重點是桌面上顯示技術資訊:機器名稱、IP位址、登入名稱等。 在「桌面資訊」中,您甚至可以將效能圖表壓縮到一半螢幕上。
    我不喜歡的是,例如,對於同一個 Bginfo,使用者需要最小化視窗才能看到必要的資料。 我和同事也在BgInfo觀察過不只一次 特徵偽影,當新文字顯示在舊文字之上時。
    一些用戶對管理員在桌面上伸展的貓臉上畫了一個可怕的192.168.0.123感到惱火,破壞了背景圖像的美觀,當然,這非常令人沮喪,完全扼殺了工作精神。
  2. 一個「我是誰」的標籤(不要試圖在最後加上問號:)。 桌面上的經典快捷方式,其後面隱藏著一個整潔或不那麼整潔的腳本,以對話框的形式顯示必要的資訊。 有時,他們不是將捷徑放在桌面上,而是將腳本本身放在桌面上,恕我直言,這是不禮貌的行為。
    缺點是要啟動快捷方式,與第一種情況一樣,您需要最小化所有打開的視窗(我們不考慮那些在工作電腦上打開唯一紙牌視窗的幸運兒)。 順便問一下,您的用戶知道在哪裡單擊以最小化所有視窗嗎? 沒錯,一根手指插在管理員的眼睛裡了。

該上限還表明,上述兩種方法都具有主要缺點,即用戶參與獲取訊息,他們可能是盲目的、愚蠢的,甚至是撒謊的。
當每個人都知道在 Windows 中的何處查找其電腦的名稱時,我不會考慮提高電腦素養的選擇:這是一項崇高的事業,但非常困難。 如果公司出現員工流失,那就完全是毀滅性的。 我能說什麼,在大多數情況下,他們甚至不記得自己的登入資訊。

我傾注了我的靈魂,現在進入正題。
以哈布羅夫居民的想法為基礎 密特爾本文.
這個想法的本質是,當使用者登入Windows時,登入腳本將必要的資訊(時間和機器名稱)輸入到使用者帳戶的某個屬性中。 當您登出系統時,會執行類似的註銷腳本。

我喜歡這個想法本身,但在實施過程中有些事情我不滿意。

  1. 群組原則為使用者指定登入和登出腳本,適用於整個網域,因此這些腳本將在使用者登入的任何電腦上執行。 如果您將終端解決方案與工作站(例如 Microsoft RDS 或 Citrix 產品)一起使用,則這種方法會很不方便。
  2. 資料被輸入到使用者帳戶的「部門」屬性中,一般使用者對該屬性具有唯讀存取權限。 除了使用者帳戶屬性之外,該腳本還會變更電腦帳戶的「部門」屬性,預設情況下使用者也無法變更該屬性。 因此,為了使解決方案發揮作用,作者建議更改 AD 物件的安全性設定標準。
  3. 日期格式取決於目標機器上的本地化設置,因此從一台機器我們可以得到 10 十一月 2018 14:53,從另一台機器得到 11/10/18 2:53 pm

為了消除這些缺點,做了以下工作。

  1. GPO 不連結到網域,而是連結到具有電腦的 OU(我將使用者和電腦分為不同的 OU 並建議其他人)。 此外,對於 環回策略處理方式 模式已設定 合併.
  2. 該腳本只會將資料寫入屬性中的使用者帳戶 聯繫我們 ,使用者可以為其帳戶獨立變更。
  3. 更改了生成屬性值的程式碼段

現在腳本看起來像這樣:
SaveLogonInfoToAdUserAttrib.vbs

On Error Resume Next
Set wshShell = CreateObject("WScript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
Set adsinfo = CreateObject("ADSystemInfo")
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
strMonth = Month(Now())
If Len(strMonth) < 2 then
  strMonth = "0" & strMonth
End If
strDay = Day(Now())
If Len(strDay) < 2 then
  strDay = "0" & strDay
End If
strTime = FormatDateTime(Now(),vbLongTime)
If Len(strTime) < 8 then
  strTime = "0" & strTime
End If
strTimeStamp = Year(Now()) & "/" & strMonth & "/" & strDay & " " & strTime
oUser.put "info", strTimeStamp & " <logon>" & " @ " & strComputerName
oUser.Setinfo

SaveLogoffInfoToAdUserAttrib.vbs

On Error Resume Next
Set wshShell = CreateObject("WScript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
Set adsinfo = CreateObject("ADSystemInfo")
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
strMonth = Month(Now())
If Len(strMonth) < 2 then
  strMonth = "0" & strMonth
End If
strDay = Day(Now())
If Len(strDay) < 2 then
  strDay = "0" & strDay
End If
strTime = FormatDateTime(Now(),vbLongTime)
If Len(strTime) < 8 then
  strTime = "0" & strTime
End If
strTimeStamp = Year(Now()) & "/" & strMonth & "/" & strDay & " " & strTime
oUser.put "info", strTimeStamp & " <logoff>" & " @ " & strComputerName
oUser.Setinfo

誰第一個找到登入和登出腳本之間的所有差異,誰就會獲得業力加分。 🙂
此外,為了獲取視覺訊息,創建了以下小 PS 腳本:
取得UsersByPCsInfo.ps1

$OU = "OU=MyUsers,DC=mydomain,DC=com"
Get-ADUser -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Информация по логонам" -Wait

總的來說,一切都配置為一二三:

  1. 建立具有必要設定的 GPO,並將其連結到具有使用者工作站的部門:
    Windows:找出誰在哪裡登入
  2. 去喝茶吧(如果AD用戶多的話,就需要很多茶了:)
  3. 運行PS腳本並得到結果:
    Windows:找出誰在哪裡登入
    視窗頂部有一個方便的篩選器,您可以在其中根據一個或多個欄位的值選擇資料。 按一下表格列可依對應欄位的值對記錄進行排序。

我們可以精美地“包裝”我們的解決方案。
Windows:找出誰在哪裡登入
為此,我們將添加一個快捷方式來為技術支援專家啟動腳本,他們將在「物件」欄位中包含類似以下內容:
powershell.exe -NoLogo -ExecutionPolicy Bypass -File "servershareScriptsGet-UsersByPCsInfo.ps1"

如果技術支援人員較多,可以使用以下方式分發捷徑: GPP.

最後一些評論。

  • PowerShell 的 Active Directory 模組必須安裝在啟動 PS 腳本的電腦上(為此,只需在 Windows 元件中新增 AD 管理工具)。
  • 預設情況下,使用者無法編輯其帳戶的大部分屬性。 如果您決定使用除 聯繫我們 .
  • 告知所有相關同事您將使用哪個屬性。 例如,同樣的 聯繫我們 用於在 Exchange Server 管理面板中以互動方式向使用者信箱新增註釋,某人可以輕鬆覆寫它,或者當他們新增的資訊被您的腳本覆蓋時感到難過。
  • 如果您有多個 Active Directory 站點,請考慮複製延遲。 例如,如果您想要從 AD 站點 A 獲取有關用戶的最新信息,並從 AD 站點 B 的計算機運行腳本,您可以執行以下操作:
    Get-ADUser -Server DCfromSiteA -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Информация по логонам" -Wait

    來自站點 A 的 DC — 網站 A 的網域控制站的名稱(預設情況下,Get-AdUser cmdlet 連接到最近的網域控制站)

Windows:找出誰在哪裡登入

圖片來源

如果您能參加下面的簡短調查,我將不勝感激。

只有註冊用戶才能參與調查。 登入, 請。

你用什麼?

  • bginfo、桌面資訊等。 (免費軟體)

  • bginfo 的付費類似物

  • 我會按照文章中的方法做

  • 不相關,因為我使用VDI/RDS等。

  • 我還沒有使用任何東西,但我正在考慮它

  • 我不需要收集此類數據

  • 其他(評論區分享)

112 位用戶投票。 39 名用戶棄權。

來源: www.habr.com

添加評論