ITよろづや

ITから生活の参考になる情報を備忘録代わりに残していきます

Windows10 PowerShellで管理者グループの一部としてローカル ユーザーを作成

Windows10 PowerShellで管理者グループの一部としてローカル ユーザーを作成に関する情報です。

 

情報元はこちら。

 

Windows 10 で管理者グループの一部としてローカル ユーザーを作成する

https://stackoverflow.com/questions/50931054/create-local-user-as-part-of-administrator-group-on-windows-10

 

質問の抜粋です。

 

===

私たちは皆、ドメイン環境にいます。Active DirectoryWindows 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 の使用
エラーがスローされない場合は、ユーザーが正常に作成され、管理者グループのメンバーであるかどうかを確認します
ログ ファイルを作成して、完了したすべてのタスクの追跡を維持します (誰が、いつ、どのホストで行ったかなど)。

===

 

回答をうまく使えば実用できそうです。

 

TNTOR モバイルバッテリー 軽量 小型 超薄 6mm 5000mAh スマホ充電器 持ち運び便利 iPhone 13/SE 第3世代/12/11/XS Max/XR/X/8/7/6/Plus Airpods/AQUOS/Xperia/Galaxy/Pixel/Xiaomi/OPPO/HUAWEIに対応 地震/災害/旅行/出張用 (ブラック)【PSE認証済】