我需要使用 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,因为我发现由于网络驱动器已映射 domain\user,因此除非我们使用 PsExec64.exe,否则它只能与 domain/service_user 断开连接,有没有办法使用不同的凭据断开驱动器的连接?
答案1
答案2
考虑不使用驱动器号。即使在 2.0 版中,Powershell 也允许您在使用文件系统时广泛使用 UNC 路径。因此,您基本上可以直接定位位置,而无需 PSDrive 或驱动器号。那么您不必映射任何东西,也不需要取消映射它们。
#as the service account
Set-Location \\SAN_SERVER\folder1
#this is the same as net use y: \\SAN_SERVER\folder1;cd y:
然后只需使用相对路径进行文件操作即可。您还可以将服务器名称和文件夹路径分配给变量,以便"$server\$folderpath\"
代替驱动器号使用。
答案3
我找到了答案,但它太愚蠢了......
& net use y: /delete /yes
这在通过 SYSTEM 的计划任务运行时有效。只需添加 &,就表明我缺乏 PS 技能。哦天哪