powershell - 如何在远程计算机上映射网络驱动器(如何在远程计算机上运行cmd命令)

时间:2012-09-13 13:19:01

标签: powershell powershell-v2.0 powershell-remoting

我正在尝试使用Invoke-Command在远程计算机上映射网络驱动器:

Invoke-Command -ComputerName servername -ScriptBlock { net use L: \\server\folder password /user:login}

但它不起作用。简单的NET USE也不起作用。我也试过Powershell: how to map a network drive with a different username/password

那么,如何在远程计算机上运行“cmd命令”NET USE?或者如何使用PowerShell映射网络驱动器?谢谢

修改

当我使用

Invoke-Command -ComputerName servername -ScriptBlock { (New-Object -ComObject WScript.Network).MapNetworkDrive 
("M:", "\\server\folder", $false, "login", "password") }

它将创建一些只能从远程计算机上看到的“影子”磁盘:

Invoke-Command -ComputerName servername -ScriptBlock { NET USE }

可以使用以下命令删除:

Invoke-Command -ComputerName servername -ScriptBlock { NET USE /d /y M: }

但是当我连接到该远程服务器时,我看不到,删除或添加映射的光盘:(

3 个答案:

答案 0 :(得分:1)

我必须使用预定任务来完成。

创建一个标准的bat文件,其中包含映射文本。

`

net use R: /Delete /y
net use R: "\\SERVERNAME\R" /persistent:yes
net use S: /Delete /y
net use S: "\\SERVERNAME\S" /persistent:yes

`

使用预定Taks作业信息创建XML

`

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2016-03-12T14:19:18.8527017</Date>
    <Author>DOMAIN\USER</Author>
  </RegistrationInfo>
  <Triggers />
  <Principals>
    <Principal id="Author">
      <GroupId>S-1-5-32-544</GroupId>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>I:\Scripts\Schedualed Taks XML\Maps.bat</Command>
    </Exec>
  </Actions>
</Task>

`

使用批处理文件创建任务(schtasks.exe)

`

@echo off
if exist "exists.txt" del "exists.txt"
for /F %%A in (SNL.txt) do (

Echo %%A

schtasks.exe /create /f /tn "Map Drives" /XML "I:\Scripts\Schedualed Taks XML\DriveMaps.xml" /s %%A


)
pause

`

注意: SNL.txt是您希望创建任务的计算机列表。

然后使用批处理文件来运行任务(如果需要,可以创建一个批处理文件)

`

@echo off
if exist "exists.txt" del "exists.txt"
for /F %%A in (SNL.txt) do (

Echo %%A

schtasks.exe /run /s %%A /tn "Map Drives" 

)

Pause

`

答案 1 :(得分:0)

试试这个:

Invoke-Command -ComputerName servername -ScriptBlock {
  (New-Object -ComObject WScript.Network).MapNetworkDrive(
      "L:", "\\server\share", $false, "login", "password"
    )
}

编辑:当我运行以下命令时

Invoke-Command -ComputerName ServerB -ScriptBlock {
  (New-Object -ComObject WScript.Network).MapNetworkDrive(
      "L:", "\\ServerC\share", $true, "DOMAIN\UserB", "password"
    )
}

DOMAIN\UserAServerA\\ServerC\share L: ServerB上的ServerB就好了。当我以DOMAIN\UserA身份登录{{1}}时,我可以看到驱动器,但收到警告,并非所有网络驱动器都可以重新连接。这是很自然的,因为UserA和UserB有不同的密码。当我点击驱动器时,系统会询问DOMAIN \ UserB的凭据,当我输入密码时,我可以正常访问该共享。

答案 2 :(得分:0)

根据This文章,如果没有CredSSP,它是不可能的? 我试图做同样的事情=(

相关问题