[Windows/PowerShell] 複数のGGサーバー (ワークグループ) にアカウントが存在するいかどうか調べたい.
技術ノート
2016/11/02
[番号]
技術ノート KGTN 2016102502
[現象]
[Windows/PowerShell] 複数のGGサーバー (ワークグループ) にアカウントが存在するいかどうか調べたい.
[説明]
以下にスクリプトのサンプルを示します.
ファイル: Conf\confHostList.ps1
# 処理の対象とするサーバー $hostList = @( "192.168.102.60", "192.168.102.72", "192.168.102.110" )
ファイル: checkUser.ps1
# ホスト情報の設定
Try
{
. (".\Conf\confHostList.ps1")
}
Catch
{
Write-Host "インクルードファイルが見つかりません。"
Exit 1001
}
# 引数のチェック
if($Args.Length -ne 1)
{
Write-Host "Usage: checkUser.ps1 <userid>"
Exit 1002
}
$argUser = $Args[0] # ユーザーID ... "wguser9012"
# ローカルアカウントの存在チェック(本体)
Function checkUser ([string]$user)
{
# 共通
$hostname = hostname
# ローカルアカウントの確認
try
{
$objComputer = [ADSI]("WinNT://$hostname,computer")
$colUsers = ($objComputer.psbase.children | Where-Object {$_.psBase.schemaClassName
-eq "User"} | Select-Object -expand Name)
if($colUsers -contains $user)
{
$Ret = "Found"
}
else
{
$Ret = "Not found"
}
}
catch
{
$Ret = "Error"
}
return "{0,-16}, {1,-16}, {2}" -f $hostname,$user,$Ret
}
# ローカルアカウントの存在チェック(呼出し)
$ii = 0
ForEach($target In $hostList)
{
$ret = Invoke-Command $target -ScriptBlock ${function:checkUser} -ArgumentList $argUser
++$ii
"[{0}] {1}" -f $ii,$ret
}