Start-process raises an error when providing Credentials - possible bug
I have the same bug.
This function is OK with Powershell ISE, but doesn't work with PowerGUI
Start-Process -FilePath "C:\WINDOWS\System32\cmd.exe" -Credential $credential -ArgumentList ("/c $sFileExecutable")
It works with the WorkingDirectory
parameter
Start-Process -FilePath 'cmd.exe' -Credential $credential -ArgumentList ("/c $sFileExecutable") -WorkingDirectory 'C:\Windows\System32'
The best explanation of the problem is buried in a comment by Nathan Hartley, so let me summarize it here:
The issue is solely related to filesystem permissions, and has nothing to do with the host environment (console vs. ISE):
When you use
Start-Process
without specifying a target directory with-WorkingDirectory
, PowerShell's current location (directory) is used for the target process as well.Since you're using
-Credential
to run as a different user - without elevation at that point - the target user may lack permission to access the current directory, which happens if the current directory is inside the current user's home directory subtree, for instance.- Unfortunately, PowerShell's error message obscures this cause by misleadingly reporting:
The directory name is invalid.
- Unfortunately, PowerShell's error message obscures this cause by misleadingly reporting:
Fix:
- Either make sure that the current location is accessible to the target user,
- or, preferably, use the
-WorkingDirectory
parameter to explicitly set the target process's current directory.
For instance, to start the target process from the directory in which a target script is located, you could use something like:
$script = 'c:\path\to\your\script.ps1'Start-Process -WorkingDirectory (Split-Path $script) -Credential ...
This is a weird one but I recreated the error and this fixed it...
http://support.microsoft.com/kb/832434
Basically, modify the start-in directory for Powershell_ISE (or PowerGUI!) to a system-wide value.