1

分散コンピューティング環境でいくつかのプロセスを実行します。あるマシン上のプロセスは、他のマシン上のプロセスと情報をやり取りする必要があります。これらの情報の 1 つは、特定のファイルの場所です。したがって、あるマシン上のプロセスが特定のネットワーク共有上の特定のファイルに情報を入力した可能性があり、別のマシン上のプロセスにその場所を伝える必要があります。

通信部分は問題ありません。問題は、マシンが配布する必要がある「位置」情報を決定することです。ドライブ マッピングを含むファイル パスは明らかに役に立ちません。マシンが異なればドライブ マッピングも異なります。したがって、完全な UNC パス名を伝える必要があります。

ほとんどの場合、その情報は簡単に入手できます。問題が発生している場所の 1 つは、この情報を取得する必要がある PowerShell スクリプトです。現在、次のコードを使用しています。

$l_logicalDisk = Gwmi Win32_LogicalDisk -filter "DeviceID = '$l_currentDrive'"
if ( $l_logicalDisk.DriveType -eq 4 )
{
    $l_base = $l_logicalDisk.ProviderName
}

し、情報を$l_base提供し\\computername\shareます。ただし、特定の状況では、これは失敗します。ドライブとそのすべてのファイルにアクセスできる場合でも、不明な理由で、マップされたドライブが Explorer.exe で「切断されたネットワーク ドライブ」として表示されることがあります。(実際、実行中のスクリプトは、想定される「切断されたネットワーク ドライブ」にも配置されています。) この状況でProviderNameは、論理ディスク情報のフィールドは空白です。「Disconnected Network Drive」からステータスを反転させるものはないようで、情報を更新する方法も見つかりませんでしたProviderName

したがって、(1) Powershell 内から切断されたネットワーク ドライブを「再接続」する方法、または (2) Powershell で上記のより信頼性の高い方法でディレクトリの UNC パス情報を取得する方法を知っている人はいますか? ありがとう。

4

1 に答える 1

2

いつでもレジストリに問い合わせることができます。これは、接続されていないドライブでも機能するはずです ( $DrvLtrZ や M などの目的のネットワークにマップされたドライブ文字に等しい)。

Pushd
cd HKCU:
$UNC=(gci network|?{$_.Name -match "$DrvLtr"}|%{Get-ItemProperty -Path $_}).RemotePath
Popd

$UNC は、「\Server01\FileShare$」のような値を持つ文字列である必要があります。これが目的だと思います。次に、あなたはただ行うことができます

$Path.Replace("$DrvLtr`:",$UNC)

これで準備は完了です

于 2014-03-07T21:46:45.757 に答える