我需要使用 SYSTEM 用户映射网络驱动器,我创建了一个由计划任务运行的 PS1,第一部分成功映射驱动器:
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("y:", "\\SAN_SERVER\folder1", $false, "domain\service_user", "password")
映射之后,发生了一堆事情,复制文件等
在脚本结束时,需要断开映射驱动器:
& 'D:\Scripts\PsExec64.exe' -s cmd /c "net use y: /delete /yes"
如果我从我的用户帐户手动运行此命令(我需要以管理员身份启动 PS),则此命令有效,但是它不适用于计划任务中的脚本,我使用的是 PsExec64.exe,因为我发现自从网络驱动器与域\用户映射,除非我们使用 PsExec64.exe,否则它只能与域/服务用户断开连接,有没有办法使用不同的凭据断开驱动器?
我暂时假设您有不使用 Powershell 脚本中的本机New-PSDrive cmdlet 的兼容性/遗留原因。
那么既然您已经在使用 WScript.Network 中的旧版MapNetworkDrive,为什么还要使用
net use
psexec 而不是仅使用它的合作伙伴RemoveNetworkDrive呢?考虑不使用驱动器号。Powershell,即使在 2.0 中,也允许您在使用文件系统时广泛使用 UNC 路径。因此,您基本上可以直接寻址这些位置,而无需 PSDrive 或驱动器号。然后你不必映射任何东西,也不需要取消映射它们。
然后只需使用相对路径进行文件操作。您还可以将服务器名称和文件夹路径分配给变量,以便可以
"$server\$folderpath\"
代替驱动器号使用。我找到了答案,它是如此愚蠢..
这在 SYSTEM 从计划任务运行时有效.. 只需添加 &,表明我缺乏 PS 技能.. 哦,男孩