Como posso executar um script do PowerShell durante o passo specialize de uma implantação do WDS?

4

Estou configurando os Serviços de Implantação do Windows (WDS) para Windows Server 2012 implementações não-assistidas usando o arquivo boot.wim padrão encontrado na mídia de instalação. Eu tenho um script do PowerShell que executa personalizações automatizadas para o nosso site. Eu quero que este script seja executado durante o passo specialize, então não tenho que mexer com logins automáticos e salvar uma reinicialização durante o provisionamento. O script não parece ser executado e os logs fornecem apenas um código de erro inútil.

Aqui está a parte relevante do meu arquivo autônomo:

    <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>

Em resposta à solicitação do kce. Aqui está o script em si:

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"
    
por snoweagle 14.02.2013 / 16:58

1 resposta

1

Pelo que estou lendo, um lance não detectado resulta no código de saída sendo um deles. Além disso, você está passando o caminho do script pela alternância -command , quando deve ser passado pela alternância -file ; consulte a referência . -command tratará sua string como um comando e, como é um caminho de arquivo, ele lançará uma daquelas mesmas exceções de letras vermelhas que adoramos na janela do PowerShell e voila! Saia do código 1, pois a exceção não foi identificada. Tudo isso é especulação, claro, a menos que

"powershell.exe" -executionpolicy bypass -noprofile -file "\<REMOTESERVER>\reminst\customize\specialize.ps1"

funciona, presumindo que a conta em que está sendo executado tenha permissões para o compartilhamento de arquivos. Para evitar esses problemas de permissão, basta colar o código no arquivo de resposta entre {} e, em seguida, você usaria a opção -command ,

"powershell.exe" -executionpolicy bypass -noprofile -command {...}
    
por 12.04.2013 / 22:38