web-dev-qa-db-ja.com

管理者として実行されているPowerShellでネットワークドライブにアクセスできません

PowerShellをWindows 7 x64仮想マシンで実行しています。ネットワークドライブ(Z :)としてマップされたホストに共有フォルダーがあります。 PSを通常実行すると、そのドライブに問題なくアクセスできますが、「管理者として」実行すると、次のように表示されます。

Set-Location : Cannot find drive. A drive with the name 'Z' does not exist.
At line:1 char:13
+ Set-Location <<<<  Z:
    + CategoryInfo          : ObjectNotFound: (Z:String) [Set-Location], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

管理者としてネットワークドライブにアクセスするにはどうすればよいですか?

56
EMP

最後に修正されたのは、単にドライブ文字を再マップすることでした管理者として実行中

Net Use Z: "\\vmware-Host\Shared Folders"

同じPowerShellインスタンスから(またはPowerShellから)実行する必要はありません。ログオンセッション全体で1回実行する必要があるだけです。

79
EMP

私の場合、ドライブマッピングの代わりに単純にUNCパスを使用でき、正常に機能しました。

したがって、あなたの例では、マップされたドライブZ:\を使用する代わりに、「\\ vmware-Host\Shared Folder」をパスとして使用しました。

9

agesを見つけるために必要な別の回避策の1つは、スケジュールされたタスクからNet Useを実行することですNT AUTHORITY\SYSTEMアカウントとして。どうやら このアカウントでマップされたドライブは、すべてのユーザーとすべての昇格レベルで表示されます

私はこれをテストしましたが、NFS共有でも動作します(少し面倒なことがあります)。システムの起動時に実行するスケジュールされたタスクセットを作成し、通常のコマンドを指定するだけです。

Net Use Z: \\server\share /persistent:no

/persistent:yesを使用して1回実行するだけで機能する可能性がありますが、試したことはありません。 「もう一度マップするだけ」も機能しますが、そのドライブは、異なるコンテキストで実行されているスケジュールされたタスクには表示されません。欠点は、すべての実際のユーザーにも表示されるため、マルチユーザー設定にはあまり適していません。

5
Roman Starkov

Powershellが昇格モードで実行されている場合、profile.ps1で「見つからない」PSDriveを再作成する次のハッキングソリューションを使用しています。

要旨

# Reconnect PSDrives for network connections when running with elevated privileges
$elevated = (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
if( $elevated ) {
    Net Use | ?{ $_ -match ":\s+\\\\"  -and !$_.StartsWith("Unavailable") } | %{
        $tokens = $_.split(":")
        $psdrivename = $tokens[0][$tokens[0].length-1]
        $path = $tokens[1].trim().split(" ")[0].trim()

        if( !(get-psdrive | ?{ $_.Name -eq $psdrivename } )) {
            write-Host ( "Restoring PSDrive for {0}: {1}" -f $psdrivename, $path )
            new-psdrive $psdrivename FileSystem $path | out-null
        }
    }
}  
3
Johan Andersson

他の答えはどれも私にとってはうまくいきませんでした。しかし、@ TimothyLeeRussellの answer は正しい方向を示してくれました。

私の場合、.batファイルはネットワークドライブにあります。管理者として実行すると、コマンドプロンプトウィンドウが点滅し、すぐに消えます。昇格したコマンドプロンプトからファイルの内容を実行したとき、問題なく動作しました。

最後に、.batマップされたネットワークドライブからのファイル。 UNCパスを使用するようにファイルの実行を変更し、機能しました。

0
Lews Therin

Vista以降のMicrosoftの既知の問題のようです。
Microsoft 知識ベース記事 withunsafeレジストリ修正。

私たちは現在、この方法を評価しています。一部の人は、この後にマシンが起動しないかもしれないと感じています;-)

0
Casey

新しいpsdriveをそのデータにアクセスする方法はどうですか? PSDriveは、スクリプトを記述したり、PowerShellでネットワークデータストアにアクセスしたりするときに、システムにマップされたドライブよりも良くない場合でも同様に機能します。

New-PSDriveコマンドレットを使用する手順は次のとおりです。 Technet:New-PSDrive

毎回新しいpsdriveを作成する必要がない場合は、管理者とユーザーアカウントの両方のプロファイルに追加することができ、powershellを開くたびに自動的に使用可能になります。

〜ダン

0
thoughtpunch