2017-06-27 39 views
2

我將在遠程服務器上執行一些工作的用戶框上運行腳本。但是,用戶將無法訪問服務器,因此我將以具有權限的其他用戶身份運行該腳本。如何使用'查詢用戶'獲取活動用戶用戶名

我遇到困難的一點是,我需要獲取登錄用戶(用戶名)的用戶名和域名以傳遞給服務器。有各種命令可以獲取我需要的數據,但是當以不同的用戶身份運行PowerShell ISE時,它們都會返回該用戶的數據而不是登錄的用戶數據。

某些命令我所說的:

[System.Security.Principal.WindowsIdentity]::GetCurrent().Name 
$env:USERNAME 
$env:USERDOMAIN 
$(whoami) 

,似乎工作就是我想要的唯一一個它是:

query user 

這將返回格式爲:

 
USERNAME    SESSIONNAME  ID STATE IDLE TIME LOGON TIME 
>user1    sessionName   4 Active   . 6/22/2017 2:56 PM 

我的兩個問題是:

  1. 有沒有辦法讓也以此方式域?我運行此命令時看不到它。
  2. 有沒有辦法只是從查詢用戶中獲取用戶名?那麼「活躍」用戶名的特異性呢?
+0

使用'$ env:USERNAME'和'$ env:USERDOMAIN'有什麼問題? – gms0ulman

+1

我的猜測是他試圖在另一個會話中確定用戶的用戶/域。 – thepip3r

+0

@ thepip3r嗯......從這個問題我明白,有2個用戶。但對我來說,讓遠程(服務器)會話查詢本地(盒子)用戶的信息似乎有點後退;使用內置的環境變量並將它們傳遞給遠程執行的代碼會更有意義 - 作爲腳本或函數參數......(免責聲明:我沒有對遠程進行太多的調整,所以可能會丟失一些東西) – gms0ulman

回答

2

查詢活動用戶:

query user | Select-String '^>(\w+)' | ForEach-Object { $_.Matches[0].Groups[1].Value } 

這取決於不包含空白用戶名。將/server參數添加到query命令以查詢遠程計算機。

+0

謝謝@Bill_Stewart,這是我正在尋找提取用戶名。 – Zirono

+1

@Zirono - 聽起來不錯 - 如果你認爲你的問題是回答的話,隨意標記答案。 –

1

win32_loggedonuser在每個用戶的「先行」屬性中包含您需要的所有信息。你需要使用字符串解析來過濾它,但它有你在找的東西。如果您需要任何額外的會話相關信息,則可以使用「依賴」屬性中的值來搜索Win32_logonsession,以獲取諸如logontype和starttime之類的內容。

$s = (gwmi win32_loggedonuser).antecedent.split('=') 
$s[1].Replace('"', '').Replace(',Name', '') ## domain 
$s[2].Replace('"','') ## username 

編輯:上述顯示解析單個用戶場景中的輸出。在多用戶場景中,您需要遍歷結果併爲每個用戶執行類似操作。我的意圖是提供一個例子。

edit2:Get-WmiObject上的-computername屬性將允許您針對遠程計算機運行此操作 - 當然具有適當的權限。

+0

Thanks @ thepip3r,我想我可以像你在Bill_Stewart的回答中一樣建立一個循環來使用它,以獲得我需要的東西。 – Zirono

1

你可以枚舉通過WMI登錄的臺式機用戶和過濾由你從query user輸出中提取的用戶名該名單(見Bill_Stewart's answer):

$user = (& query user) -replace '^>(\S+).*', '$1' 

$qry = 'SELECT * FROM Win32_Process WHERE Name="explorer.exe"' 
Get-WmiObject -Query $qry | ForEach-Object { 
    $_.GetOwner() 
} | Sort-Object -Unique User, Domain | Where-Object { 
    $_.User -eq $user 
} | ForEach-Object { 
    '{0}\{1}' -f $_.Domain, $_.User 
} 

query user命令列出遠程桌面會話/用戶,所以如果有多個用戶可以同時登錄,則需要過濾命令的輸出。

+0

是的,這正是我想到的,然後我重新加載頁面,看到你的答案。謝謝! – Zirono

相關問題