Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 7 如何说服powershell(通过任务调度器运行)找到我的网络驱动器?_Windows 7_Powershell_Task_Scheduler - Fatal编程技术网

Windows 7 如何说服powershell(通过任务调度器运行)找到我的网络驱动器?

Windows 7 如何说服powershell(通过任务调度器运行)找到我的网络驱动器?,windows-7,powershell,task,scheduler,Windows 7,Powershell,Task,Scheduler,我在Windows7上有一个简单的powershell脚本,无法正常工作。(这不是XP的问题) 当我直接运行它时,我得到 Name Used (GB) Free (GB) Provider Root ---- --------- --------- -------- ---- A FileSystem A:\ Alias

我在Windows7上有一个简单的powershell脚本,无法正常工作。(这不是XP的问题)

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

  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:drive。如果有任何方法可以解决这个问题,我将能够在那里复制文件….

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

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

cd \\server\share\directory
完全不映射驱动器就可以完成所需的任务吗?您提到了复制文件-如果任务是使用您的凭据运行的,并且假设您拥有Q:drive的权限(比如说\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

在脚本中运行get-psdrive之前,首先执行以下操作:

$net = new-object -comobject Wscript.Network
$net.mapnetworkdrive("Q:","\\path\to\share",0,"domain\user","password")
完成工作后(复制文件…):


如果您不想在脚本中使用密码,则有一个黑客攻击,我更愿意避免:

  • 以足够的权限打开文件夹(例如域用户)
  • 以管理员身份打开powershell,并创建从UNC到本地路径的符号链接

    新项目-项目类型SYMBOLCLINK-路径“C:\LocalTemp\”-值“\unc”

  • 现在,您可以直接在powershell脚本中使用UNC路径,它将使用计划任务中提供的凭据打开它


计划任务中的凭据可能存在一些问题,但在我看来,这仍然比脚本中的明文或伪模糊密码更好。

听起来像是权限问题-您确定计划任务的用户对文件系统和powershell都具有正确的权限吗?是,我以“我”的身份运行,并检查“最高权限”…:(呃……我周末一直在挖掘,发现了一个糟糕的解决方法。使用“net use h:\\server\mount/user:domain/credentials password”会让它工作的。真的吗?这就是我所有的?它工作了,但现在我的脚本中有了用户名凭据…是的,我可以使用.net加密,但真的…对不起,但你可能可以通过模仿我的环境来了解我的情况。Powershell在Windows 7上通过远程共享运行任务计划程序。你的建议不起作用作为使用任务调度器的计划任务,我尝试了…:(你的开头一段解释了操作系统正在做的事情,非常有帮助。哦,我没有注意到你的评论,不是鲍勃-这个解决方案就像你的网络使用解决方案一样。是的,你的答案与我的答案相匹配。我仍然不明白为什么它的工作方式不同,即使是作为同一个用户运行。唉……但是为了让这个解决方法更有效一些很明显,我会将你的答案标记为我正在寻找的答案。谢谢!
$net = new-object -comobject Wscript.Network
$net.mapnetworkdrive("Q:","\\path\to\share",0,"domain\user","password")
$net.removenetworkdrive("Q:")