インストールメディアにあるデフォルトのboot.wimファイルを使用して、 Windows Deployment Services (WDS)for Windows Server 2012 無人デプロイメントをセットアップしています。私たちのサイトの自動カスタマイズを実行するPowerShellスクリプトがあります。 specializeパス中にこのスクリプトを実行したいので、自動ログインをいじったり、プロビジョニング中に再起動したりする手間を省くことができます。スクリプトは実行されていないように見え、ログは役に立たないエラーコードを出力するだけです。
これが私の無人ファイルの関連部分です。
<settings pass="specialize">
<component name="Microsoft-Windows-Deployment" processorArchitecture="AMD64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.Microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RunSynchronous>
<RunSynchronousCommand wcm:action="add">
<Order>1</Order>
<Credentials>
<Domain>WDSSERVER</Domain>
<Password>APASSWORD</Password>
<Username>AUSERNAME</Username>
</Credentials>
<Path>"c:\windows\system32\windowspowershell\v1.0\powershell.exe" -executionpolicy unrestricted -command "\\<REMOTESERVER>\reminst\customize\specialize.ps1"</Path>
</RunSynchronousCommand>
</RunSynchronous>
</component>
</settings>
Kceからの要求に応じて。スクリプト自体は次のとおりです。
write-Host "Executing customisation script."
write-Host "enabling powershell script execution"
Set-ExecutionPolicy Unrestricted
write-Host "Bringing non-system disks online..."
Get-Disk | Where-Object IsOffline –Eq $True | Set-Disk –IsOffline $False
Set-Disk -Number 1 -IsReadOnly $False
Set-Disk -Number 2 -IsReadOnly $False
write-Host "Setting up NTP..."
W32tm /register
start-service w32time
w32tm /config /manualpeerlist:uk.pool.ntp.org
restart-service w32time
Set-Service W32Time -StartupType Automatic
sc triggerinfo w32time start/networkon stop/networkoff
sc config W32Time start=auto
write-Host "Determining system RAM and setting pagefile..."
$RAM = Get-WmiObject -Class Win32_OperatingSystem | Select TotalVisibleMemorySize
$RAM = ($RAM.TotalVisibleMemorySize / 1kb).tostring("F00")
write-Host "disable automanage"
wmic computersystem set AutomaticManagedPagefile=False
Write-Host "removing old pagefile"
wmic pagefileset delete
write-Host "creating new pagefile on E:\"
wmic pagefileset create name=“e:\pagefile.sys”
write-Host "set size"
$PageFile = Get-WmiObject -Class Win32_PageFileSetting
$PageFile.InitialSize = $RAM
$PageFile.MaximumSize = $RAM
[void]$PageFile.Put()
write-Host "Disabling Windows Firewall..."
netsh advfirewall set allprofiles state off
write-Host "Enabling powershell remoting..."
Enable-PSRemoting -Force
write-Host "Sorting out remote management trusted hosts..."
winrm s winrm/config/client '@{TrustedHosts="*"}'
write-Host "Disabling Windows error reporting..."
Disable-WindowsErrorReporting
write-Host "Installing VMware Tools..."
c:\vmware-tools.exe /S /v"/qn"
私が読んでいるものから、キャッチされていないスローは、終了コードが1になるという結果になります。また、-command
スイッチを介して渡す必要がある場合、-file
スイッチを介してスクリプトパスを渡します。 参照 を参照してください。 -command
は、文字列をコマンドとして扱います。これはファイルパスであるため、PowerShellウィンドウで私たちが気に入っている同じ赤い文字の例外の1つをスローします。例外がキャッチされていないため、終了コード1。もちろん、それ以外はすべて推測です
"powershell.exe" -executionpolicy bypass -noprofile -file "\\<REMOTESERVER>\reminst\customize\specialize.ps1"
それが実行されているアカウントがファイル共有へのアクセス許可を持っていると仮定すると、実際には機能します。これらの権限の問題を回避するには、コードを{}とその後の間にある応答ファイルに貼り付けるだけですwould-command
オプションを使用し、
"powershell.exe" -executionpolicy bypass -noprofile -command {...}