Windows10 PowerShellで管理者グループの一部としてローカル ユーザーを作成に関する情報です。
情報元はこちら。
Windows 10 で管理者グループの一部としてローカル ユーザーを作成する
質問の抜粋です。
===
私たちは皆、ドメイン環境にいます。Active Directory は Windows Server 2012 R2 です
クライアント ワークステーションに Windows 10 バージョン (1703 と 1709) が混在している
すべてのワークステーションでユーザー「Servis」を作成し、ローカル管理者グループに配置する必要があります。ホスト名を含むテキスト ファイルを入力します。
これは、機能させようとしているスクリプトですが、成功していません。
ユーザーは作成されますが、ユーザーはローカル管理者グループに追加されません。
これは私が得るエラーです:
WinNT://WS-TEST で Service23 を作成中にエラーが発生しました: メンバー "add" の取得中に次の例外が発生しました: "ネットワーク パスが見つかりませんでした。
$computers = Get-Content -path C:\Scripts\CreateLocalUser\New\Computers.txt
$username = "Servis"
$password = "P4$$w0rd!@#"
Foreach ($computer in $computers) {
$users = $null
$computer = [ADSI]"WinNT://$computername"
Try {
$users = $computer.psbase.children | select -expand name
if ($users -like $username) {
Write-Host "$username already exists" -ForegroundColor Green
}
Else {
$user_obj = $computer.Create("user", "$username")
$user_obj.SetPassword($password)
$user_obj.SetInfo()$user_obj.Put("description", "$username")
$user_obj.SetInfo()
$user_obj.psbase.invokeset("AccountDisabled", "False")
$user_obj.SetInfo()
$users = $computer.psbase.children | select -expand name
if ($users -like $username) {
Write-Host "$username has been created on $($computer.name)"$group = [ADSI]("WinNT://" + $computername + "/administrators,group")
$group.add("WinNT://" + $computername + "/" + $username + ",user")
}
Else {
Write-Host "$username has not been created on $($computer.name)"
}
}
}
Catch {
Write-Host "Error creating $username on $($computer.path): $($Error[0].Exception.Message)"
}
}
===
続いて、回答の抜粋です。
===
SecureString形式のパスワードを使用して資格情報を正しく定義したら、ローカル管理者を作成するのは 2 段階のプロセスです。
ユーザーを作成する
そのユーザーをローカル管理者グループに追加します
これらの数行は、必要な powershell コードです。
$username = "Servis"
$password = ConvertTo-SecureString -AsPlainText "P4$$w0rd!@#" -Force
New-LocalUser "$username" -Password $password -FullName "$username" -Description "Local admin $username"
Add-LocalGroupMember -Group "Administrators" -Member "$username"
スクリプトをより堅牢にしたい場合は、いくつかの Pester テストを作成し、これらのチェックをスクリプトに追加することを検討する必要があります。
ファイルが存在するかどうかを検証する
ファイルの内容を検証します (正規表現を使用した IP または FQDN の場合)
接続する前に、ホストが到達可能かどうかをテストします (例: Test-Connection -computername $computer -count 1 -quiet)。
コンピューター名と引数リスト (ユーザー名、パスワード) を指定した invoke-command の使用
エラーがスローされない場合は、ユーザーが正常に作成され、管理者グループのメンバーであるかどうかを確認します
ログ ファイルを作成して、完了したすべてのタスクの追跡を維持します (誰が、いつ、どのホストで行ったかなど)。
===
回答をうまく使えば実用できそうです。