在CMD中运行多行PowerShell脚本

YJZ*_*YJZ 3 powershell cmd

我正在尝试在cmd中使用以下Powershell脚本。这是一个简单的例子:

$path = "c:\"
cd $path
ls
Run Code Online (Sandbox Code Playgroud)

一些多行且带引号的PowerShell脚本。

我阅读了这篇文章以及@Alex在这篇文章中的回答,但是;在它们之间放置多行并没有用:

C:\ Users \ abcd> powershell“&c:\; ls”
&:术语'c:\'不被识别为cmdlet,函数,
脚本文件或可操作程序。检查名称的拼写,或者
包含路径,请确认路径正确,然后重试。
行:1字符:2
+&c:\; ls
+ ~~~
    + CategoryInfo:ObjectNotFound:(c:\:String)[],CommandNotFoundException
    + FullyQualifiedErrorId:CommandNotFoundException

PS:我的实际任务是运行以下命令(我在上面提供了琐碎的任务,因为并非每个人都有数据库)。

$tabular_server = "abc_123\Tabular"

[Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")
$server = New-Object Microsoft.AnalysisServices.Server
$server.connect($tabular_server)
$db = $server.Databases.Item("db_name")

$db.Process("ProcessClear")
$db.Process("ProcessDefault")
$server.Disconnect()
Run Code Online (Sandbox Code Playgroud)

Ans*_*ers 8

&是PowerShell的调用运算符。该运算符用于调用以字符串形式出现的命令/功能(例如,因为有人想要将其表示为变量,或者它们的路径包含空格)以及脚本块。

在您的情况下,只需将您的语句放在一行中,并以分号分隔即可:

powershell.exe -Command "$path = 'c:\'; cd $path; ls"
Run Code Online (Sandbox Code Playgroud)

但是,就我个人而言,我更喜欢将语句放在脚本块中(这是调用运算符的作用):

powershell.exe -Command "&{$path = 'c:\'; cd $path; ls}"
Run Code Online (Sandbox Code Playgroud)

不管哪种方法都可以。请注意,在双引号命令字符串中,您需要使用单引号或转义嵌套的双引号。

综上所述,-Command不建议通过参数更长,更复杂的PowerShell代码内联执行。最好将代码编写到PowerShell脚本中,然后像这样运行它:

powershell.exe -File "C:\path\to\your.ps1"
Run Code Online (Sandbox Code Playgroud)