为什么“using”作用域可以在 Start-Job 本地工作,但不能与 Invoke-Command 一起工作?

2023-11-27

为什么 PowerShell 不允许使用using使用时范围Invoke-Command本地?根据文档, the using修饰符只能用于远程命令。去引用:

从 PowerShell 3.0 开始,您可以使用Using范围修饰符来标识远程命令中的局部变量。

运行时可以演示此行为Invoke-Command本地:

$myServerName = 'www.google.com'
Invoke-Command { ping $using:myServerName }

这会引发以下错误:

无法检索 using 变量。使用变量只能与脚本工作流程中的 Invoke-Command、Start-Job 或 InlineScript 一起使用。当它与 Invoke-Command 一起使用时, 仅当在远程计算机上调用脚本块时,使用变量才有效。

该错误表明远程使用using修饰符仅远程有效,Invoke-Command。所以,如果我们尝试使用运行相同的东西Start-Job, 会发生什么?

$myServerName = 'www.google.com'
$j = Start-Job { ping $using:myServerName }
while( $j.State -eq 'Running' ){ Start-Sleep -s 1 }
Receive-Job $j

这不会引发错误,并且我得到了我期望的输出:

 Pinging www.google.com [172.217.6.132] with 32 bytes of data:
 Reply from 172.217.6.132: bytes=32 time=20ms TTL=56
 Reply from 172.217.6.132: bytes=32 time=19ms TTL=56
 Reply from 172.217.6.132: bytes=32 time=19ms TTL=56
 Reply from 172.217.6.132: bytes=32 time=19ms TTL=56

为什么文档中指出using范围修饰符只有在也可以在本地上下文中明确使用时才能远程工作?同样,如果它在本地环境中起作用Start-Job,是什么阻止了它与当地人合作Invoke-Command?


当使用“using”时确实如此,因为 using 的定义是,

从 PowerShell 3.0 开始,您可以使用Using范围修饰符来标识远程命令中的局部变量

任何时候你使用$using,你必须提供-ComputerName or -Session参数目标服务器是本地主机还是远程服务器。

Ex.

$myServerName = 'www.google.com'
Invoke-Command { ping $using:myServerName }
### BIG ERROR.

$myServerName = 'www.google.com'
Invoke-Command { ping $using:myServerName } -computername $env:COMPUTERNAME
### Ping response.

$myServerName = 'www.google.com'
Invoke-Command { ping $myServerName }
### Ping Reponse.

$using:仅在少数特定上下文中受支持,这些上下文有一个共同点:在当前运行空间之外运行的代码 - 所有其他上下文既不需要也不支持它。 (@mklement0)

[Invoke-Command, Start-Job, and InlineScript是支持使用的已知上下文$using:在当前本地会话中传递变量。]

有关可以使用的位置的文档$using

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

为什么“using”作用域可以在 Start-Job 本地工作,但不能与 Invoke-Command 一起工作? 的相关文章

随机推荐

  • Android手机可以使用windows DirectX库吗?

    我有一些使用 Windows 中的 Direct X 库绘制游戏屏幕的函数 因此 我尝试使用 ndk 来使用 Android 手机中的功能 但我有一些问题 使用Java的Android手机可以识别Direct X功能吗 如果可以的话 我必须
  • git add --interactive“您编辑的块不适用”

    我正在尝试使用git add interactive有选择地向我的索引添加一些更改 但我不断收到 您编辑的大块不适用 再次编辑 消息 即使我选择 e 选项 我也会收到此消息 并立即保存 关闭我的编辑器 换句话说 如果根本不编辑该块 该补丁就
  • Rabbitmq Consumer_Timeout 行为未按预期工作?

    我很难证明consumer timeout设置正在按预期工作 我可能做错了或者误解了consumer timeout行为 我所有的测试代码都可以在这里找到 https github com Rafarel rabbitmq tests 基本
  • instance_eval 的块参数 - 已记录?目的?

    刚刚意识到instance eval yields self作为关联块的参数 1 9 2 版本中的错误除外 http www ruby forum com topic 189422 1 9 3p194 003 gt class C end
  • 如何从 LINQ to XML 中的 XElement 读取特定元素值

    我有一个XElement其中有这样的内容
  • HTML:如何创建“另存为”按钮?

    在浏览器中 当您想要保存当前正在查看的 HTML 页面时 通常会转到 文件 菜单并单击 另存为 我可以在 HTML 页面底部添加一个具有相同功能的小按钮吗 因此 我希望我的用户能够单击按钮将页面保存到磁盘上 而不是转到 文件 菜单 gt 另
  • EF Core 2.0 Identity - 添加导航属性

    在 EF Core 2 0 中 默认情况下不包含 Identity 导航属性 因此在升级后 我添加了它们 因此 对于用户和角色之间的多对多关系以及角色和 RoleClaim 之间的一对多关系 我添加了以下导航属性 public class
  • 如何扩展Spring注解@Transactional

    我必须在我的网络应用程序中使用 3 个不同的事务管理器 所以我根据以下内容编写了自己的注释弹簧参考 第 10 5 6 3 节自定义快捷方式注释 一个注释 用于使用一个特定的事务管理器 如下所示 import java lang annota
  • 使用 PHP 删除文件夹中的所有文件?

    例如 我有一个名为 Temp 的文件夹 我想使用 PHP 删除或刷新该文件夹中的所有文件 我可以这样做吗 files glob path to temp get all file names foreach files as file it
  • Numpy 融合乘法和加法以避免浪费内存

    是否可以将两个 ndarray A 和 B 相乘并将结果添加到 C 而无需为 A 乘以 B 创建一个大型中间数组 Numpy 对于 C A 乘 B 的情况有 out 关键字参数 numpy multiply A B out C C A 乘以
  • SQL Server SORT 顺序与 ASCII 代码顺序不对应

    我正在使用 SQL Server 2012 并且我有一个数据库SQL Latin1 General CP1 CI AS整理 create table testtable c nvarchar 1 null insert into testt
  • 通过 USB 安装应用程序 [安装被用户取消]

    我可以通过 USB 将应用程序安装到我的 Android 设备上 但是 当 Android 上显示允许 拒绝安装弹出窗口时 我错误地单击了 拒绝 并选中了 记住我的选择 现在 每次尝试通过 USB ADB 安装应用程序都失败并出现错误com
  • UrlHelper.GenerateUrl 的 ASP.NET MVC 公共替代方案

    我想在我的页面中嵌入一个指向控制器操作的链接 以便我可以从 javascript 使用它 就像是 var pollAction Mycontroller CheckStatus 现在我很高兴对其进行硬编码 但如果有一种可以用来创建 URL
  • python中的快速寻峰和质心

    我正在尝试用 python 开发一种快速算法 用于查找图像中的峰值 然后找到这些峰值的质心 我使用 scipy ndimage label 和 ndimage find objects 编写了以下代码来定位对象 这似乎是代码中的瓶颈 在 5
  • Pojo 到 xsd 生成

    是否有一个库可以从 java 类生成 xsd 模式 Google 产生了很多相反的结果 来自 xsd 的 java 类 JAXB 2 0 允许您从带注释的 Java 类创建 XML 模式 您可以在以下位置找到一些示例AMIS 博客并在Jav
  • 如何在 iOS 推送通知上增加徽章

    我目前正在从有效负载中获取徽章 但我怎样才能更新这个值 aps alert Notification Hub test notification2 badge 1 sound Default 当我发送此消息时 徽章编号中始终显示 1 但是当
  • 批处理参数 %~s1 给出了错误的 8.3 短名称

    我正在尝试在 Windows XP 中编写一个批处理文件 该文件接受完全限定的路径名 并输出 8 3 短名称版本 echo off echo s1 我遇到过一种特殊情况 它输出不正确的路径和文件 C gt test bat C Docume
  • Angular-ui + D3:如何实现上下文菜单(弹出框与模式)?

    给出以下用例 我使用 D3js 来渲染由 AngularJS 管理的对象 我想为 D3 图表添加交互性 当单击 svg 元素时 我希望有一种弹出菜单 允许修改对象属性 这些属性是 AngularJS 所必需的 但 D3 不会呈现 D3 An
  • sys.path 与 $PATH

    我想从 python 程序内部访问 PATH 变量 到目前为止我的理解是 sys path 给出了 Python 模块搜索路径 但我想要的是 PATH 环境变量 有没有办法从Python内部访问它 为了提供更多背景知识 我最终想做的是找出用
  • 为什么“using”作用域可以在 Start-Job 本地工作,但不能与 Invoke-Command 一起工作?

    为什么 PowerShell 不允许使用using使用时范围Invoke Command本地 根据文档 the using修饰符只能用于远程命令 去引用 从 PowerShell 3 0 开始 您可以使用Using范围修饰符来标识远程命令中