Start-process raises an error when providing Credentials - possible bug Start-process raises an error when providing Credentials - possible bug powershell powershell

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.

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.