【问题标题】:Run PowerShell command from command prompt (no ps1 script)从命令提示符运行 PowerShell 命令(无 ps1 脚本)
【发布时间】:2013-08-29 13:32:18
【问题描述】:

我正在寻找一种在命令提示符下仅运行几个 PowerShell 命令的方法。我不想为此创建脚本,因为它只是我需要运行的几个命令,而且我真的不知道如何使用 PowerShell 编写脚本。

这是我尝试使用的命令:

Get-AppLockerFileInformation -Directory <folderpath> -Recurse -FileType <type>

我真的不想为此创建脚本,因为如果我可以从批处理文件中运行一个或两个命令以及其余的东西,那会容易得多。

编辑: 这是我迄今为止尝试过的。

1)

powershell -Command "Get-AppLockerFileInformation....."
Error: The term 'Get-AppLockerFileInformation is not recognized as the name of a cmdlet, function, script file, or operable program....

2)

powershell -Command {Get-AppLockerFileInformation.....}

这种方式没有错误,但我没有得到任何回报。如果我使用 Set-AppLockerPolicy... 什么都不会发生。

3)

powershell -Command "{Get-AppLockerFileInformation.....}"
Error: The term 'Get-AppLockerFileInformation is not recognized as the name of a cmdlet, function, script file, or operable program....

4)

powershell -Command "& {Get-AppLockerFileInformation.....}"
Error: The term 'Get-AppLockerFileInformation is not recognized as the name of a cmdlet, function, script file, or operable program....

5)

powershell "& {Get-AppLockerFileInformation.....}"
Error: The term 'Get-AppLockerFileInformation is not recognized as the name of a cmdlet, function, script file, or operable program....

6)

powershell -ExecutionPolicy Bypass -NoLogo -NoProfile -Command {Get-AppLockerFileInformation....}

没有错误,但什么也没发生。

7)

powershell -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "Get-AppLockerFileInformation...."

没有错误,但什么也没发生。

【问题讨论】:

  • 一方面你说“我真的不想创建一个脚本”,另一方面你说“如果我可以从一个批处理文件中运行一个或两个命令”。所以:这是什么???
  • 我应该澄清一下,我不想创建一个 powershell 脚本。
  • 并且Get-AppLockerFileInformation 在从新的干净的 powershell 提示符运行时对您来说效果很好?什么操作系统? (在 Win7 中测试了 Get-App.. 并且在这种情况下没有这样的 cmdlet,所以得到相同的错误消息)
  • 我首先使用Import-Module AppLocker命令加载库。我正在使用 Windows Embedded 7。也许我需要结合 2 个调用,导入库然后运行命令...??
  • *.com/a/19111810 可能与您相关。它是关于如何将 .cmd 和 .ps1 组合成一个文件(.cmd)。

标签: powershell batch-file cmd


【解决方案1】:

这是解决我的问题的唯一答案,在this 网页的帮助下找到了答案(很好的参考)。

powershell -command "& {&'some-command' someParam}"

另外,这是执行多个命令的巧妙方法:

powershell -command "& {&'some-command' someParam}"; "& {&'some-command' -SpecificArg someParam}"

例如,这是我运行 2 个命令的方式:

powershell -command "& {&'Import-Module' AppLocker}"; "& {&'Set-AppLockerPolicy' -XmlPolicy myXmlFilePath.xml}"

【讨论】:

  • 这是另一个有用的技巧,您可以从命令提示符运行 ps1 脚本并像这样传递参数:powershell.exe -File "C:\myfile.ps1" arg1 arg2 arg3powershell.exe -File "C:\myfile.ps1" -Some-Command arg1 -Another-Command arg2
  • 命令 powershell -command "&amp; {&amp;'Import-Module' AppLocker}"; "&amp; {&amp;'Set-AppLockerPolicy' -XmlPolicy myXmlFilePath.xml}" 在单独的 PS 会话中运行这 2 个 PS 命令,即它不适用如果您需要在 2 个命令之间共享某些变量。解决方法如下:powershell -command "&amp; {$someVar = 'test'; &amp;'Write-Host' $someVar}"
  • @Maciej 我认为它不会在不同的 PS 会话中运行,否则此特定命令的第二部分将失败,因为我需要从命令的第一部分加载该模块。我不同意。但是,正如您所提到的,如果需要,共享变量可能会有一些价值。
  • 很好的答案。小扩展:我需要在命令提示符的新窗口中启动 powershell 命令,发现以下工作:start powershell -Command "&amp; cd C:\somedir; npm start"
【解决方案2】:

像这样在单个命令行上运行它:

powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile 
  -WindowStyle Hidden -Command "Get-AppLockerFileInformation -Directory <folderpath> 
  -Recurse -FileType <type>"

【讨论】:

  • 一有机会我就试试这个。不过里面好像有很多flags,如果我想用Set-AppLockerPolicy和New-AppLockerPolicy会一样吗?
  • 这不起作用,更不用说 -WindowStyle 标志关闭我的命令提示符...另外,我不需要 ExecutionPolicy 标记,因为我直接使用命令行。
  • 是的,有些选项可能是不必要的。只需根据您的需要进行调整。更多信息:zduck.com/2012/powershell-batch-files-exit-codes
【解决方案3】:

也许powershell -Command "Get-AppLockerFileInformation....."

看看powershell /?

【讨论】:

  • 这就是我一直在尝试的,但我似乎并没有完全正确地理解语法或其他东西。当我直接从 powershell 运行命令时,它工作正常...
  • 好的,您有什么错误或其他问题吗?请编辑您的问题并提供更多信息。你试过什么,什么不起作用等等。
  • 这个语法对我有用。我看到的一个警告是它不适用于单引号。
【解决方案4】:

这适用于我的 Windows 10 的 cmd.exe 提示符

powershell -ExecutionPolicy Bypass -Command "Import-Module C:\Users\william\ps1\TravelBook; Get-TravelBook Hawaii"

这个例子显示

  1. 如何链接多个命令
  2. 如何通过模块路径导入模块
  3. 如何运行模块中定义的函数
  4. 不需要那些花哨的“&”。

【讨论】:

  • 是的,要运行脚本,您需要更改本地执行策略......