読者です 読者をやめる 読者になる 読者になる

HYPERCONCERTO株式会社のチーフエンジニア雑記Blog

hyperconcerto株式会社のチーフエンジニアが日々気づいたことを書いています

5回目、vSphereをPowerShellで操作するときのTips

昨年末からPowershellとPowerCLI関係の作業が続いているので、しばらくこの調子でいきたいと思います。

PowershellとBATのお悩み1
タスクスケジューラで実行しているスクリプトからファイルサーバーへ接続できないんですが…

回答
タスクスケジューラやスクリプトの単体実行の場合、特に意識しない限り実行ユーザーは
ローカルコンピュータに作成されたユーザーアカウントで実行されます。
タスクスケジューラの場合はローカルAdministratorが多いのではないでしょうか。
で、そんな状態でファイルサーバーへ接続しようとしても、ADと連携しているファイルサーバーに
ローカルユーザーアカウントが通用するわけもなく接続に失敗します。
このような場合はnet useコマンドで明示的にADユーザーを指定してネットワークドライブを作成します

例:Vドライブとしてマウントする
net use V: \\192.168.0.1\Temp P@ssw0rd1! /user:test-domain\user1

使い終わったらスクリプトの終端部分でネットワークドライブを消します
net use V: /delete

わりと知らない人が多くて現場ではまっているのをよく見かけます。


Powershellのお悩み2
Powershellレジストリ操作はできるのでしょうか

回答
レジストリの書き込み例
UACを無効にする場合
$path1 = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
Set-ItemProperty $path1 -name "ConsentPromptBehaviorAdmin" -value "0"
Set-ItemProperty $path1 -name "PromptOnSecureDesktop" -value "0"

レジストリの内容を取得する場合
$path1 = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
Get-ItemProperty $path1


Powershellのお悩み3
Windows Serverの初期設定スクリプトのサンプルをください

回答
運用自動化の関係でこういう問い合わせが増えています。
下記内容の設定を一発で行うスクリプト例を示します

1.ユーザーを追加
2.Remote Desktopを有効化
3.UAC無効化
4.Windows Firewall無効化

※管理者として実行としないと動かないです

#testuserを管理者権限を付けてパスワード期限を無期限
net user testuser /add
net user testuser P@ssw0rd1!
net localgroup administrators testuser /add
wmic useraccount where "Name='testuser'" set PasswordExpires=FALSE

#Remote Desktop有効化
$path1 = "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server"
$path2 = "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp"
Set-ItemProperty $path1 -name "fDenyTSConnections" -value "0"
Set-ItemProperty $path2 -name "UserAuthentication" -value "0"

#UAC無効化
$path1 = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
Set-ItemProperty $path1 -name "ConsentPromptBehaviorAdmin" -value "0"
Set-ItemProperty $path1 -name "PromptOnSecureDesktop" -value "0"

#Firewall無効化
netsh advfirewall set allprofiles state off