Windows 7 如何说服powershell(通过任务调度器运行)找到我的网络驱动器?
我在Windows7上有一个简单的powershell脚本,无法正常工作。(这不是XP的问题) 当我直接运行它时,我得到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
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:")