Windows – Not able to execute remote poweshell script in windows server 2016 unattended installation

powershellsambaunattendedwindowswindows-server-2016

I am trying to create unattended.xml file for windows server 2016 unattended installation where in after installing windows it should execute one powershell script located on remote samba share.

I am using following command to run powershell script stored in samba share:

cmd.exe /c "ECHO R | powershell.exe -ExecutionPolicy Unrestricted -File \\192.168.137.131\install\ConfigureRemotingForAnsible.ps1"

The Unattended installation process works well but ConfigureRemotingForAnsible.ps1 script execution fails with error:

The argument '\\192.168.137.131\install\ConfigureRemotingForAnsible.ps1' to the -File parameter does not exist. Provide the path to an existing '.ps1' file as an argument to the -File parameter.

The same command executes successfully when I run it manually.

Relevant portion of unattended.xml file:

<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">
                    <Credentials>
                        <Username>Administrator</Username>
                        <Password>Devops@123</Password>
                    </Credentials>
                    <Path>cmd.exe /c "ECHO R | powershell.exe -ExecutionPolicy Unrestricted -File \\192.168.137.131\install\ConfigureRemotingForAnsible.ps1 > c:\pss.txt"</Path>
                    <Order>1</Order>
                    <Description>Execute ansible script</Description>
                </RunSynchronousCommand>
            </RunSynchronous>
        </component>
    </settings>

Can somebody tell me what should I add in my unattended.xml to make it working?

Thanks in advance.

Best Answer

From the docs it seems the Path item is accessed using the provided credentials, but not run as. Broadly it says that RunSynchronousCommand during Specialize runs in a system context, whereas an AuditUser would run as the user.

Some options:

  • During Specialize, map a drive with explicit credentials to the remote share using net use or New-PSDrive
  • Put your commands in the AuditUser. In the comments by the OP, it's mentioned this had other issues.
  • Create an Administrator AutoLogon, and run your commands in a SetupComplete.cmd

I'm referring to the docs at https://docs.microsoft.com/en-us/windows-hardware/customize/desktop/unattend/microsoft-windows-deployment-runsynchronous-runsynchronouscommand-credentials, and https://technet.microsoft.com/en-us/library/cc722343(v=ws.10).aspx