2012年12月13日木曜日

PowershellでWindows各種設定を行う

  • このエントリーをはてなブックマークに追加


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


この記事がお役にたちましたらシェアをお願いします:)

  • このエントリーをはてなブックマークに追加

3 件のコメント:

  1. ドメイン参加のとこで、

    >$password = "P@ssw0rd"
    >$pass = ConvertTo-SecureString $pwd -AsPlainText -Force
    ConvertTo-SecureStringの引数に変数”$pwd”を渡していますが、正しくは1行上で定義している”$password”を渡すのが正しいと思います。

    返信削除
    返信
    1. このコメントは投稿者によって削除されました。

      削除
    2. たしかにそうしないとドメイン参加が通りませんね。

      $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、パスワードファイルを削除とかすればいいと思います。

      削除