从Powershell脚本运行多个cmd命令,就像我在cmd shell中运行它一样

时间:2019-03-13 09:27:45

标签: mongodb powershell

我正在尝试创建一个Powershell脚本,该脚本将在远程计算机上创建一个会话并运行一系列命令。这些有问题的命令是在部署代码之前删除Mongodb数据库。

我有会话方面的工作,但是当我尝试运行cmd时,我得到X is not recognized as the name of a cmdlet

我登录到远程计算机并使用cmd时执行的过程是:

  1. 'C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe'
  2. use <database>
  3. db.dropDatabase()

这正常工作,我试图在Powershell中运行它们。他们需要逐行运行才能工作。

ps1:

$session = New-PSSession -ComputerName "remoteMachine" -Credential $cred

Enter-PSSession -Session $session

Invoke-Command -ComputerName "remoteMachine" -ScriptBlock {
    & 'C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe' 
    & 'use <database>'
    & 'db.dropDatabase()'
}

Exit-PSSession
Get-PSSession | Remove-PSSession

运行此命令时,出现以下错误:

  

“使用评估”一词未被识别为cmdlet的名称,

     

术语'db.dropDatabase()'不被识别为cmdlet的名称,

1 个答案:

答案 0 :(得分:1)

我通过浏览& 'C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe' --help来弄清楚。

而不是使用多行,我将命令放在一行上,例如:

Invoke-Command -ComputerName "remoteMachine" -ScriptBlock {
    & 'C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe' <database> --eval '<action>'
}

例如:

Invoke-Command -ComputerName "remoteMachine" -ScriptBlock {
    & 'C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe' testDatabase --eval 'db.dropDatabase()'
}