为什么我不能使用 Start-Process 来调用带参数的脚本?

2023-12-11

我正在尝试在 Powershell 中编写一个包装器脚本,该脚本传递可执行文件的名称,进行一些预处理,然后使用该预处理产生的参数调用该可执行文件。我希望可执行文件是可以在 Windows 上运行/打开的任何内容,所以我想使用Start-Process运行它使用脚本中的参数调用第二个脚本(其中引用Invoke-Expression)并不真正相关。我发现,当可执行文件是另一个 Powershell 脚本时,该脚本看不到参数。

我的愚蠢的小测试是:

Write-Output "Arg0: '$($Args[0])', Arg1: '$($Args[1])'" >>test.log

在 PS 提示下工作,我看到的是:

PS C:\Source> .\test.ps1 a b
PS C:\Source> more .\test.log
Arg0: 'a', Arg1: 'b'

PS C:\Source> .\test.ps1 c d
PS C:\Source> more .\test.log
Arg0: 'a', Arg1: 'b'
Arg0: 'c', Arg1: 'd'

PS C:\Source> Start-Process .\test.ps1 -ArgumentList e,f
PS C:\Source> Start-Process .\test.ps1 -Args e,f
PS C:\Source> more .\test.log                                                                                   
Arg0: 'a', Arg1: 'b'
Arg0: 'c', Arg1: 'd'
Arg0: '', Arg1: ''
Arg0: '', Arg1: ''

PS C:\Source>   

这与我使用时看到的一致Start-Process在脚本中。我花了几个小时谷歌搜索但没有找到答案。有什么想法吗?

我正在 Windows 10 上进行开发,但我的目标是 Windows Server。我不知道这会有所作为。


您需要通过调用脚本powershell.exe:

Start-Process powershell -ArgumentList "-File .\test.ps1 arg1 arg2 argX"

您可以将参数列表指定为字符串或字符串数​​组。请参阅此处的示例 7了解更多信息。

正如@mklement0在问题评论中所述,如果您不通过调用它powershell.exe,它将在 Windows 认为的默认上下文中执行它.ps1文件应该被执行,在这种情况下不会将额外的参数传递给脚本。


您可能不需要使用Start-Process不过 - 如果您不需要提供的任何特殊功能Start-Process您也可以使用 call 来调用脚本&运算符或通过指定脚本的路径,就像交互一样:

# You can use a variable with the path to the script
# in place of .\test.ps1 here and provide the arguments
# as variables as well, which lets you build a dynamic
# command out without using `Start-Process` or `Invoke-Expression`.
& .\test.ps1 arg1 arg2 argX

or

# You can use variables for the arguments here, but the script name
# must be hardcoded. Good for cases where the entrypoint doesn't change.
.\test.ps1 arg1 arg2 argX

您可能还想考虑使用论据分散在构建动态命令时也可以用于您的论点。我在这里写了一个答案以及更详细地介绍了泼溅。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我不能使用 Start-Process 来调用带参数的脚本? 的相关文章

随机推荐

  • 如何在实体框架中访问context.Database.SqlQuery?

    我正在尝试遵循本教程 http blogs msdn com b diego archive 2012 01 10 how to execute stored procedures sqlquery in the dbcontext api
  • 无法将文件从 docker-compose 挂载复制到主机

    我无法将 Selenium 测试生成的文件复制到安装到主机的 docker 容器内的文件夹中 这是我的撰写文件的样子 selenium image selenium standalone chrome expose 4444 tests b
  • 使用 boost asio 重用套接字

    我尝试使用 boost asio 套接字 绑定到本地地址 端口组合 效果很好 不起作用的是 一旦套接字和应用程序停止并重新启动 就重新使用套接字 open the socket it would also be opened by the
  • Google Actions sdk 无法从 Firebase 存储中播放 ssml 中的音频

    Google Actions SDK 无法从 Firebase 存储播放 SSML 音频标记中的音频文件 虽然我可以播放维基百科上相同的 ogg 格式文件 https upload wikimedia org wikipedia en 9
  • CSS媒体查询处理新的高分辨率手机,同时忽略平板电脑

    根据我的研究 新款智能手机人像分辨率高达800px平板电脑最低纵向分辨率 600px 现在 我尝试使用媒体查询将移动 css 渲染到支持高达 800px 分辨率的手持设备 但我遇到的问题是旧平板电脑 例如具有 768px 纵向分辨率的 ip
  • 如果用户在java中关闭浏览器,如何清除httpsession

    如果消费者关闭浏览器窗口 我试图清除 HttpSession 我不知道该怎么做 请帮助我 感谢和问候 却克里 如果您可以让浏览器 可靠地 通知服务器用户已关闭窗口 那么服务器可以调用session invalidate 根据 ejay fr
  • 快速改变图像的色调

    I am new to swift and trying to achieve this essentially This image to 这张图片 gt 我正在使用这个代码从这里更改图像的色调但未获得所需的输出 func tint im
  • 使用 h5py 沿新轴将数据添加到现有 h5py 文件

    我有一些生成 3d Numpy 数组的示例代码 然后我使用 h5 文件将此数据保存到 h5py 文件中 然后我如何沿着第四维 附加 第二个数据集 或者 我如何沿着现有的第四维 或新轴 编写另一个 3D 数据集 h5文件 我已经阅读了我能找到
  • 如何在 Google App Engine 中使用自定义 Python 库和应用程序?

    我想知道如何在 Google App Engine 的 django nonrel 中安装和使用第三方库和 或应用程序 目前我的 Web 应用程序使用 django nonrel 我想安装 github 中提供的一些库 通常 库需要通过 p
  • 获取用户详细信息、计算年龄并显示所有信息的程序

    我启动了一些代码 但在将用户字符串输入保存到变量中时遇到问题 使用 ReadString 我可以提示用户输入字符串 但是将用户输入保存到名为 AskName1 的变量中 然后显示 AskName1 中保存的信息后 我发现它保存了用户输入的字
  • R中使用循环处理文件夹中的所有文件

    我需要处理一个文件夹中的所有文件 并且文件是按顺序命名的 所以我认为这是循环的好时机 处理单个文件的代码很简单 df lt read table CLIM0101 WTG skip 3 header TRUE df lt df 1 df y
  • Spring Security:在 SecurityContext 中找不到 Authentication 对象

    以下配置 filterChain 在 SpringBoot 2 7 5 中工作正常 但在我尝试在 SpringBoot 3 0 0 RC1 中测试它之后 它不起作用并显示以下消息 如果想要迁移 我需要更改任何内容到 Spring Boot
  • Windows 10 中的 Android AVD 模拟器缩放问题

    我在 Windows 10 Android Studio 2 3 3 上 我创建了一个具有以下配置的 android avd 但显示屏无法正确缩放 显示屏仅在一个角落 Name 4 WVGA Nexus S API 23 CPU ABI G
  • ListView可以在ExpandableListView里面吗?

    我们可以在 ExpandableListView 中包含 ListView 吗 这样我就可以首先拥有组级别 然后拥有子级数组 listView 我已经完成了列表视图课程 它工作得很好 但如何调用可扩展列表视图中的每个组来显示列表视图 布局
  • 这在 PHP 中意味着什么:-> 或 =>

    我一直在 PHP 中看到这些 但我不知道它们的实际含义 什么是 gt 做什么以及做什么 gt 做 我不是在谈论运营商 它们是别的东西 但似乎没有人知道 The 双箭头运算符 gt 用作数组的访问机制 这意味着在数组上下文中 其左侧的值将具有
  • R:将XML数据转换为数据框

    对于家庭作业 我试图将 XML 文件转换为 R 中的数据框架 我尝试了许多不同的方法 并且在互联网上搜索了一些想法 但没有成功 到目前为止 这是我的代码 library XML url lt http www ggobi org book
  • 通知等待模式的C++多线程算法设计

    我正在寻找以下算法在 Windows 上的多线程实现的建议和代码示例 主题1 采取input1 做工作 通知Thread2 继续工作 主题2 采取input2 做工作 等待来自thread2的通知 做一些处理 通知Thread3 继续工作
  • WKWebView:是否可以预加载多个URL?

    刚刚将应用程序迁移到WKWebView想知道是否有任何可能的方法来 预加载 多个 URL 但一次只显示一个 我有 5 个 URL 的列表 我已经知道我会在某个时间点显示 并且我想通过预加载这些内容以在单个时间点中使用来加快体验速度WKWeb
  • Scala Futures:每个新创建或映射的异常的默认错误处理程序

    是否有可能始终使用默认的 onFailure 处理程序创建 Future 块 例如将堆栈跟踪写入控制台 该处理程序还应该自动附加到映射的 future 通过在已经具有默认故障处理程序的 future 上调用映射创建的新 future 另请参
  • 为什么我不能使用 Start-Process 来调用带参数的脚本?

    我正在尝试在 Powershell 中编写一个包装器脚本 该脚本传递可执行文件的名称 进行一些预处理 然后使用该预处理产生的参数调用该可执行文件 我希望可执行文件是可以在 Windows 上运行 打开的任何内容 所以我想使用Start Pr