Windows Server 2012でOS各種設定(コンピューター名変更、ファイアーウォール無効、リモートデスクトップ有効、ドメイン参加など)をPowershellで自動化したいと思います。使うコマンドをメモします。
コンピューター名変更
Powershel 3.0の標準コマンドで変更
Rename-Computer -ComputerName <oldName> -NewName <newName> [-Restart]
コマンド実行後、再起動を行うには、コマンドに-Restartをつけます
WMIを使ってコンピューター名を変更
(Get-WmiObject -Class Win32_ComputerSystem).Rename("newName")
サーバー再起動する
Restart-Computer
Windows ファイアーウォールを無効/有効1)プライベートネットワーク、パブリックネットワーク、ドメインネットワークで全て無効
Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled false
2)パブリックネットワークだけで無効
Get-NetFirewallProfile -Name Public | Set-NetFirewallProfile -Enabled false
3)ファイアーウォールを有効にするには、"false"を"true"に書き換えればいい。
リモートデスクトップ接続を有効/無効
Powershell3.0で対応するコマンドが無さそうなので、WMIを使う
1)有効にする
(Get-WmiObject win32_TerminalServiceSetting -Namespace root\cimv2\TerminalServices).SetAllowTSConnections(1)
2)無効にする
(Get-WmiObject win32_TerminalServiceSetting -Namespace root\cimv2\TerminalServices).SetAllowTSConnections(0)
ドメイン参加
$admin = "test\administrator"
$password = "P@ssw0rd"
$pass = ConvertTo-SecureString $pwd -AsPlainText -Force
$domainCredential = New-Object System.Management.Automation.PSCredential $admin, $pass
Add-Computer -DomainName "test.local" -ComputerName "testpc" -Credential $domainCredential -OUPath "OU=HR" -Restart -Force
コンピューター名変更
Powershel 3.0の標準コマンドで変更
Rename-Computer -ComputerName <oldName> -NewName <newName> [-Restart]
コマンド実行後、再起動を行うには、コマンドに-Restartをつけます
WMIを使ってコンピューター名を変更
(Get-WmiObject -Class Win32_ComputerSystem).Rename("newName")
サーバー再起動する
Restart-Computer
Windows ファイアーウォールを無効/有効1)プライベートネットワーク、パブリックネットワーク、ドメインネットワークで全て無効
Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled false
2)パブリックネットワークだけで無効
Get-NetFirewallProfile -Name Public | Set-NetFirewallProfile -Enabled false
3)ファイアーウォールを有効にするには、"false"を"true"に書き換えればいい。
リモートデスクトップ接続を有効/無効
Powershell3.0で対応するコマンドが無さそうなので、WMIを使う
1)有効にする
(Get-WmiObject win32_TerminalServiceSetting -Namespace root\cimv2\TerminalServices).SetAllowTSConnections(1)
2)無効にする
(Get-WmiObject win32_TerminalServiceSetting -Namespace root\cimv2\TerminalServices).SetAllowTSConnections(0)
ドメイン参加
$admin = "test\administrator"
$password = "P@ssw0rd"
$pass = ConvertTo-SecureString $pwd -AsPlainText -Force
$domainCredential = New-Object System.Management.Automation.PSCredential $admin, $pass
Add-Computer -DomainName "test.local" -ComputerName "testpc" -Credential $domainCredential -OUPath "OU=HR" -Restart -Force
この記事がお役にたちましたらシェアをお願いします:)
ドメイン参加のとこで、
返信削除>$password = "P@ssw0rd"
>$pass = ConvertTo-SecureString $pwd -AsPlainText -Force
ConvertTo-SecureStringの引数に変数”$pwd”を渡していますが、正しくは1行上で定義している”$password”を渡すのが正しいと思います。
このコメントは投稿者によって削除されました。
削除たしかにそうしないとドメイン参加が通りませんね。
削除$pwdと$passwordを間違えただけだと仮定した場合、
平文埋め込みしてる時点でセキュアストリングに変換する意味は無いですからね。
>$password = "P@ssw0rd"
$pwd = "P@ssw0rd"
$pass = ConvertTo-SecureString $pwd -AsPlainText -Force
本来なら、パスワードは入力させれば変換もしなくていいのでこれだけでいいですよね。
# ID/Password の入力
$domainCredential = Get-Credential
Add-Computer -DomainName "test.local" -ComputerName "testpc" -Credential $domainCredential -OUPath "OU=HR" -Restart -Force
入力を間違えた場合のエラー処理と再入力を求めるループが必要になるので面倒ですけどね。
自分しか使わないなら最後にPS1自体を削除すれば平文埋め込みでもいいと思いますが。。
僕だったら、ファイルサーバーにセキュアストリング変換したパスワードをファイル保存して、
最初にファイルサーバーにユーザーID、パスワードファイルの有無確認
→無ければ入力させてファイルサーバーにセキュアストリングでファイルを作成 にしますね。
# ディレクトリパス
$CurrentDir = "ファイルサーバーのパス"
# ユーザーIDファイルのフルパスを生成
$UserIdFile = Join-Path $CurrentDir "userid.txt"
# パスワードファイルのフルパスを生成
$PasswordFile = Join-Path $CurrentDir "password.txt"
# ユーザーIDファイル、パスワードファイルの存在確認、無ければ入力して生成
if (!((Test-Path $UserIdFile) -and (Test-Path $PasswordFile))) {
# ID/Password の入力
$Credential = Get-Credential
# ユーザーIDファイルの生成
$Credential.UserName | ConvertFrom-SecureString | Set-Content $UserIdFile
# パスワードファイルの生成
$Credential.Password | ConvertFrom-SecureString | Set-Content $PasswordFile
}
# セキュアストリングとしてユーザーIDを取り出す
$userId = Get-Content $UserIdFile | ConvertTo-SecureString
# セキュアストリングとしてパスワードを取り出す
$pwd = Get-Content $PasswordFile | ConvertTo-SecureString
Add-Computer -DomainName "test.local" -ComputerName "testpc" -Credentia $userId, $pwd -OUPath "OU=HR" -Restart -Force
これなら一度入力が通れば次から入力しなくて済むので、
入力を間違えた場合のエラー処理と再入力を求めるループも考慮しなくて済むと思います。
そして、-final オプションで実行した場合は
ファイルサーバーのユーザーID、パスワードファイルを削除とかすればいいと思います。