如何说服PowerShell(通过任务调度程序)找到我的网络驱动器?

not*_*bob 3 powershell scheduler task windows-7

我在Windows 7上有一个简单的PowerShell脚本无法正常工作.(这不是XP的问题)

get-psdrive
Run Code Online (Sandbox Code Playgroud)

当我直接运行时,我得到了

  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
Run Code Online (Sandbox Code Playgroud)

当我通过任务调度程序运行时,我得到了

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
Run Code Online (Sandbox Code Playgroud)

请注意,我错过了我的Q:驱动器.如果有任何方法可以解决这个问题,我将能够在那里复制文件....

Goy*_*uix 6

网络驱动器,实际上所有驱动器号都被"映射"到给定登录会话的卷.当您创建要运行的计划任务时,它会创建一个新的登录会话(即使您当前已登录)并在该上下文中运行计划任务.因此,虽然您可能已登录并且已映射Q驱动器 - 运行该任务的第二个会话具有完全不同的环境,但Windows足以自动映射所有会话的C :(和其他物理驱动器).

使用PowerShell时,您不需要将映射映射到驱动器,除了方便之外.与cmd.exe的前身不同,PowerShell非常乐意将当前目录更改为UNC样式路径:

cd \\server\share\directory
Run Code Online (Sandbox Code Playgroud)

是否可以在不绘制驱动器的情况下完成所需的操作?您已经提到了复制文件 - 如果任务使用您的凭据运行,并假设您拥有Q:驱动器的权限(比如说\ server\share),那么您的脚本应该能够执行以下操作:

copy c:\logs\*.log \\server\share\logs
Run Code Online (Sandbox Code Playgroud)

并且工作得很好而无需映射驱动器.

这是我的测试的完整命令信息.如果您的环境不同,请注意如何.该任务配置为作为我的域帐户运行,仅在我登录时,具有最高权限并为Windows 7/Server 2008 R2配置.

行动是启动一个程序:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Run Code Online (Sandbox Code Playgroud)

参数

-command copy c:\logs\*.log \\server\share\logs
Run Code Online (Sandbox Code Playgroud)

  • 您的开头段落解释了操作系统正在执行的操作的具体细节,这非常有帮助。 (2认同)