3

Windows 7 で適切に動作しない単純な powershell スクリプトがあります。(XPでは問題ありません)

get-psdrive

直接実行すると、

  Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
A                                      FileSystem    A:\
Alias                                  Alias
C                  12.30         11.60 FileSystem    C:\
cert                                   Certificate   \
D                                      FileSystem    D:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
**Q                1486.63        289.41 FileSystem    Q:\**
Variable                               Variable
WSMan                                  WSMan

これをタスクスケジューラで実行すると、

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
A                                      FileSystem    A:\
Alias                                  Alias
C                  12.30         11.60 FileSystem    C:\
cert                                   Certificate   \
D                                      FileSystem    D:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan

Q: ドライブがないことに注意してください。これを解決する方法があれば、そこにファイルをコピーできます....

4

3 に答える 3

6

ネットワーク ドライブ、および実際にはすべてのドライブ文字は、特定のログオン セッションのボリュームに "マップ" されます。実行するスケジュールされたタスクを作成すると、新しいログイン セッションが作成され (現在ログインしている場合でも)、そのコンテキストでスケジュールされたタスクが実行されます。したがって、ログインして Q ドライブがマップされている場合、タスクを実行している 2 番目のセッションの環境はまったく異なりますが、Windows は、すべてのセッションに対して C: (および他の物理ドライブ) を自動的にマップするのに十分です。

おそらく便宜上、PowerShell を使用する場合は、マップをドライブにマップする必要はありません。cmd.exe の前身とは異なり、PowerShell は現在のディレクトリを UNC スタイルのパスに完全に変更します。

cd \\server\share\directory

ドライブをまったくマッピングせずに必要なことを達成することは可能ですか? ファイルのコピーについて言及しました-タスクが資格情報で実行されており、Q:ドライブ(\ server \ shareとしましょう)へのアクセス許可があると仮定すると、スクリプトは次のようなことを実行できるはずです:

copy c:\logs\*.log \\server\share\logs

ドライブをマップしなくても問題なく動作します。

これは、機能したテストの完全なコマンド情報です。環境が異なる場合は、その方法に注意してください。タスクは、ログインし、最高の特権を持ち、Windows 7/Server 2008 R2 用に構成されている場合にのみ、ドメイン アカウントとして実行するように構成されています。

アクションは、プログラムを開始することです。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

引数

-command copy c:\logs\*.log \\server\share\logs
于 2010-11-02T19:17:02.863 に答える
1

おそらく、スクリプトで get-psdrive を実行する前に、まず次のようにします。

$net = new-object -comobject Wscript.Network
$net.mapnetworkdrive("Q:","\\path\to\share",0,"domain\user","password")

そしてあなたの仕事をした後(ファイルのコピー..):

$net.removenetworkdrive("Q:")
于 2010-11-04T14:00:08.430 に答える