2016-08-18 7 views
0

私は前にシステムにログオンしているユーザーのSIDを見つけようとしています。私たちのシステムには、管理者以外のユーザー(最初は#がないユーザー)と管理ユーザー(#が付いています)が分かれています。私は上記の最終$UserSID = ...ラインで'$DomainUser'を使用している場合、このスクリプトは動作しませんPowershellで変数を使用して検索する

$CurrentDomainUser = wmic computersystem get username 
$Separator = "\" 
$CurrentDomainUserSplit = $CurrentDomainUser.split($Separator) 
$DomainUser= $CurrentDomainUserSplit[3] 

New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_Users 

$UserSID = ls 'hklm:software/microsoft/windows nt/currentversion/profilelist' | ? { 
       $_.getvalue('profileimagepath') -match '$DomainUser' -and 
       $_.getvalue('profileimagepath') -notmatch '#' 
      } | % pschildname 

:私のPowerShellスクリプトは、これまでのところ、このです。それは私は実際の値を入れている場合は動作します。

これはシンプルなPowerShell構文の問題だと思います。

+0

こんにちは、 '$ CurrentDomainUserSplit [3]'では、なぜ '3'ですか?そして、あなたは最終的に何を達成しようとしていますか? – sodawillow

+1

Get-WmiObject/Get-CimInstanceを使用してWin32_ComputerSystemを照会します。 wmicを使用してそれを行うと、解析が少し愚かです。 –

+0

@sodawillow:CurrentDomainUserSplit [3]の出力は、 "wmic computersystem get username"コマンドのユーザ名部分です(ドメイン名、バックスラッシュなどはありません)。 –

答えて

2

NTAccount.Translate

を使用するには、Get-WmiObjectコマンドを代わりにWMICの

$DomainUser = (Get-WmiObject Win32_ComputerSystem).Username -replace '^.+\\' 
New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_Users 
$UserSID = Get-ChildItem 'HKLM:/software/microsoft/windows nt/currentversion/profilelist' | 
    Where-Object { $_.getvalue('profileimagepath') -match $DomainUser -and $_.getvalue('profileimagepath') -notmatch '#'} | 
    ForEach-Object pschildname 

を使用したWindowsは、すでにセキュリティ識別子に名前を変換する方法を知っています。この方法をSIDに使うことができます。

$userName = (Get-WmiObject Win32_ComputerSystem).Username 
$ntAccount = New-Object System.Security.Principal.NTAccount($userName) 
$sid = $ntAccount.Translate([System.Security.Principal.SecurityIdentifier]) 
+0

ブーム - それはそうです。どうもありがとう! –

1
... -match '$DomainUser' ... 

PowerShellは唯一、二重引用符で囲まれた文字列ではなく、単一引用符で囲まれた文字列の中の変数を展開します。一重引用符を二重引用符に置き換えるか、引用符を完全に削除します。

+0

クリス・デントはこれを示唆しましたが、うまくいかないようです - 私のコメントを見てください。 –

+0

あなたの文字列の値はあなたが思うものではありません。 –

+0

ありがとうございます - あなたは正しいです。上記のコメントの項で説明したように、一般的なレベルになっているはずです。クリスの答えが実際に私が必要な場所に私を連れて来ることを認めている間に、私はあなたの入力のためにあなたに信用を与える方法がありますか? –

関連する問題