web-dev-qa-db-ja.com

資格情報を提供するときに開始プロセスでエラーが発生する-バグの可能性

以下のコードに応答してこのエラーが発生する理由を知っているでしょうか。ユーザー名とパスワードが正しいことを確認しました。

$secPassword = ConvertTo-SecureString "Password" -AsPlaintext -Force 
$farmCredential = New-Object System.Management.Automation.PsCredential "SharePoint\SP_Farm",$secPassword

Start-Process $PSHOME\powershell.exe -Credential $FarmCredential -ArgumentList "-NoExit","-Command `"&{`$outvar1 = 4+4; `"write-output `"Hello:`"`$outvar1`"}`"" -Wait

エラー;

Start-Process : This command cannot be executed due to the error: The directory name is invalid.
At C:\Users\Administrator.SHAREPOINT\AppData\Local\Temp\fb2956d7-87fc-4235-9f3c-742698cafe9f.ps1:8 char:14
+ Start-Process <<<<  $PSHOME\powershell.exe -Credential $FarmCredential -ArgumentList "-NoExit","-Command `"&{`$outvar1 = 4+4; `"write-output 
`"Hello:`"`$outvar1`"}`"" -Wait
    + CategoryInfo          : InvalidOperation: (:) [Start-Process], InvalidOperationException
    + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand

ただし、これは問題なく機能します。

Start-Process $PSHOME\powershell.exe -ArgumentList "-NoExit","-Command `"&{`$outvar1 = 4+4; `"write-output `"Hello:`"`$outvar1`"}`"" -Wait

注:これは、PowerGUIまたはISE ide内から実行する場合です。ファイルfb2956d7-87fc-4235-9f3c-742698cafe9f.ps1はパスの場所に存在するため、何らかの理由でideでこれが困難になっています。それでも、PowerShellコマンドPrompt/Shell内で直接実行すると機能します。ローカル管理者として実行されているローカルマシンアカウントでログインしました。スクリプトは、管理者権限を持たず、ユーザー権限のみで実行されるドメインアカウントに実行を指示します。

これはバグですか?開発者として、PowerShellコマンドのプロンプトウィンドウでブロックを実行すると機能するため、IDEはこれによってトリップされるべきではありませんか?

14
chris

同じバグがあります。

この機能はPowershellISEでは問題ありませんが、PowerGUIでは機能しません

Start-Process -FilePath "C:\WINDOWS\System32\cmd.exe" -Credential $credential -ArgumentList ("/c $sFileExecutable")

WorkingDirectoryパラメータで動作します

Start-Process -FilePath 'cmd.exe' -Credential $credential -ArgumentList ("/c $sFileExecutable") -WorkingDirectory 'C:\Windows\System32'
11
Dionysoos

これは奇妙なものですが、私はエラーを再現し、これで修正しました...

http://support.Microsoft.com/kb/832434

基本的に、Powershell_ISE(またはPowerGUI!)の開始ディレクトリをシステム全体の値に変更します。

5
nimizen

私はこれがかなり遅いことを知っていますが、スレッドは私を助けました(特に @ Dionysoosからの提案 )、そして私の答えが他の人を助けるかもしれないことを願っています。

同じエラーが発生しました...

Start-Process : This command cannot be executed due to the error: The directory name is invalid.

... ISEでの作業中に、スクリプトを無人で実行した場合。

無人スクリプトは、ユーザー固有の$env:TEMPを作業ディレクトリとして使用していました。これは、新しいプロセスがそれにアクセスできないことを意味していました。 -WorkingDirectory $env:windirコマンドでStart-Processを指定すると、問題が解決しました。

4
paulf

問題の最も良い説明は コメントby Nathan Hartley に埋もれているので、ここで要約しましょう:

問題は単にファイルシステムのアクセス許可に関連するであり、ホスト環境(コンソールとISE)とは何の関係もありません。

  • Start-Processでターゲットディレクトリを指定せずに-WorkingDirectoryを使用すると、PowerShellの現在の場所(ディレクトリ)がターゲットプロセスにも使用されます。

  • 別のユーザーとして実行するために-Credentialを使用している-その時点で昇格なし-ターゲットユーザーが現在のディレクトリにアクセスする権限を持っていない可能性があるたとえば、現在のディレクトリが現在のユーザーのホームディレクトリサブツリー内にある場合に発生します。

    • 残念ながら、PowerShellのエラーメッセージは、誤解を招くような報告によってこの原因を覆い隠しています:The directory name is invalid.

修正

  • 現在の場所がターゲットユーザーにアクセス可能であることを確認してください。
  • または、できれば-WorkingDirectoryパラメータを使用して、ターゲットプロセスの現在のディレクトリを明示的に設定します。

たとえば、ターゲットscriptが配置されているディレクトリからターゲットプロセスを開始するには、次のようなものを使用できます。

$script = 'c:\path\to\your\script.ps1'
Start-Process -WorkingDirectory (Split-Path $script) -Credential ...
3
mklement0

これは少し遅れるかもしれませんが、現在のディレクトリがネットワークパスのときにそのコマンドを実行していますか?私はこれを問題として経験しました、そして私がシステムドライブから同じコマンドを実行するならばそれは働きます。

1
TroyBramley

私の場合、その理由は、Windows 10が保存して、予想とは異なる方向に新しいファイルを作成したためです。profile.ps1ファイルをC:\Users\Username\Documents\WindowsPowerShellに追加しようとしましたが、C:\Users\Username\**OneDrive**\Documents\WindowsPowerShellである必要があります。これらの手順に従ってください

RUN:
Test-Path C:\Users\User\Documents\WindowsPowerShell\
IF FALSE
New-Item -Path C:\Users\User\Documents\WindowsPowerShell\ -ItemType Directory
THEN
New-Item -Path $profile.CurrentUserAllHosts -Type File
THEN
start $profile.CurrentUserAllHosts
0
chavy