Powershell 范围处理 v2/v3 的未记录更改?

2024-05-03

背景:我一直在编写一个 powershell 脚本,用于将文件从 Windows Server '08(使用 Powershell 2.x)上的 Sharpoint 2010 实例迁移到 Windows Server '12(使用 Powershell 3.x)上的 Sharepoint 2013 实例。我已经做到了这一点,但我注意到范围的处理方式发生了变化。

Issue:我有以下代码可以在两个 PSSession 上运行($param是参数值的哈希表)

Invoke-Command -session $Session -argumentlist $params -scriptblock `
{
    Param ($in)
    $params = $in # store parameters in remote session

    # need to run with elevated privileges to access sharepoint farm
    # drops cli stdout support (no echo to screen...)
    [Microsoft.SharePoint.SPSecurity]::RunWithElevatedPrivileges(
    {
        # start getting the site and web objects
        $site = get-spsite($params["SiteURL"])
    })
}

我注意到在 PS 2.x 远程会话中分配给$site也分配给相同的变量Invoke-Command的范围,即要么范围被传递,要么它们共享相同的范围。BUT在 PS 3.x 远程会话中分配给$site does not改变其中的值Invoke-Command(真正的子范围)。

我的解决方案:我编写了一个函数来计算它调用的每个服务器上的正确范围,然后使用返回值作为输入Get-Variable and Set-Variable's -Scope选项。这解决了我的问题并允许分配和访问变量。

Function GetCorrectScope
{
    # scoping changed between version 2 and 3 of powershell
    # in version 3 we need to transfer variables between the
    # parent and local scope.
    if ($psversiontable.psversion.major -gt 2)
    {
        $ParentScope = 1 # up one level, powershell version >= 3
    }else
    {
        $ParentScope = 0 # current level, powershell version < 3
    }

    $ParentScope
}

问题: Microsoft 在哪里(如果有的话)对此进行了记录? (我在关于范围 http://technet.microsoft.com/en-us/library/hh847849.aspx在 TechNet 上,它说它适用于 2.x 和 3.x,并且是我在其他问题中看到的标准参考)。

另外,有没有更好/正确的方法来做到这一点?


它记录在 WMF 3 发行说明的“对 WINDOWS POWERSHELL 语言的更改”部分中。

作为委托运行的脚本块在其自己的范围内运行

Add-Type @"
public class Invoker
{
    public static void Invoke(System.Action<int> func)
    {
        func(1);
    }
}
"@
$a = 0
[Invoker]::Invoke({$a = 1})
$a

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

Powershell 范围处理 v2/v3 的未记录更改? 的相关文章

  • Winform 启动后隐藏或最小化 powershell 提示符

    我编写了一个简单的 powershell 脚本来启动 winform 在 powershell 脚本中编写的 Winform 代码 例如 showContent ps1 文件 并显示一些内容 我需要在Winform启动后隐藏powershe
  • nuget 对文件名中的空格进行编码

    我使用 pack 命令创建了一个 nuget 包 http docs nuget org docs reference command line reference Pack Command http docs nuget org docs
  • 如何编写从管道输入读取的 powershell 函数?

    SOLVED 以下是使用管道输入的函数 脚本的最简单示例 每个的行为都与通过管道传输到 echo cmdlet 相同 作为函数 Function Echo Pipe Begin Executes once before first item
  • 使用 shell_exec 将 PHP 转换为 Powershell

    如果我运行 output shell exec powershell get service dhcp 我得到了 dhcp 服务的完美输出 显示正在运行 但如果我运行 output shell exec powershell get use
  • 嵌套 .ajax() 调用的 JavaScript/jQuery 变量作用域问题

    我很难传递变量postData这是一个嵌套子级的序列化 jQuery 数组对象 ajax call postData成功传递给第一个 ajax 打电话 但是当我尝试在第二次使用它时 ajax 调用时 它不会发布任何表单元素 因为变量在该级别
  • 防止集成终端自动打开

    每当我在 VS Code 中打开 PowerShell 脚本时 集成终端就会打开 如何防止集成终端自动打开 我搜索了 终端 的设置 但没有发现与自动启动相关的内容 VSCode 会记住您的上一次会话 因此 如果关闭终端并退出 VSCode
  • Invoke-Sqlcmd 运行脚本两次

    我遇到了一个非常奇怪的问题并且可以重复 基本上 我使用invoke sqlcmd通过使用 inputfile来调用脚本文件 但是如果脚本文件存在一些执行错误 例如插入到列不应为空的表中 则脚本文件将被执行两次 我也可以从探查器中看到这两个执
  • Start-Job 输出去了哪里?

    W gt job start job Write Output hi there throw an error Wait Job W gt job select State Failed HasMoreData True StatusMes
  • 如何使用PowerShell脚本远程启动/停止IIS 6.0/7.0?

    我有两台服务器服务器 A 和服务器 B 我想使用 Powershell 脚本从服务器 B 远程停止服务器 A 最简单的方法之一就是使用命令行执行PsExec http www microsoft com technet sysinterna
  • 原型组件的 Spring 事件处理

    假设我有两个组件 X 和 Y 其中 X 是单例 而 Y 不是 当我发布XUpdateEvent时 没有问题 我可以捕获该事件 但是 对于 YUpdateEvent 我无法捕获事件 Spring 为每个触发的事件创建新实例 而不是使用已经创建
  • 如何将 .bat 文件中的变量获取到 PowerShell 脚本中?

    我正在用 PowerShell 替换 bat 脚本的部分内容 批处理文件的配置是通过以下文件完成的set适当的环境变量 我正在寻找一种方法将这些变量值加载到 ps1脚本 无需修改 bat文件 因为它们也在其他地方使用 一个例子 bat看起来
  • 用于检查 URL 状态的 PowerShell 脚本

    与此问题类似 https stackoverflow com questions 18500832 script to check the status of a url我正在尝试监视一组网站链接是否已启动并运行或没有响应 我在 Inter
  • Powershell:根据属性过滤属性

    我对 PowerShell 的自学经验有限 所以这可能是一些基本的东西 但我似乎无法正确理解 我在 Active Directory 中 需要提取电子邮件地址不以 SamAccountName 开头的用户列表 因此 如果您的登录名是 jdo
  • 替换 CSV 文件中的引号和特殊字符的一些难题

    我在处理一些需要清理并加载到数据库中的 CSV 文件时遇到了一些难题 我相当擅长使用 PowerShell 但不擅长正则表达式和 csv 列操作 这是我遇到的问题 我正在使用的 CSV 文件中有一个 注释 字段 可以包含各种不同的字符 主要
  • 使用 powershell 编辑 XML

    好吧 我感觉自己像个大白痴 为了工作中的管理目的 我使用 Powershell 已经有一段时间了 也就是说 编写脚本不是我的强项 现在 我正在尝试编写一个 PS 脚本 将一个部分添加到一堆机器上的 XML 中 以添加设置来解决我们在某个应用
  • PowerShell 脚本 ffmpeg

    作为一名优秀的 Windows 系统管理员 我终于开始学习 PowerShell 话虽这么说 我不知道我在做什么 惊讶 惊讶 我认为远离生产环境 在家里使用 PowerShell 对我来说将是一次很好的学习经历 最近 我开始使用 FFMPE
  • 请解释 JavaScript 闭包在循环中的使用[重复]

    这个问题在这里已经有答案了 我读过很多关于闭包和循环内闭包的解释 我很难理解这个概念 我有这样的代码 有没有一种方法可以尽可能地减少代码 从而使闭包的概念更加清晰 我很难理解其中的部分i位于两个括号内 谢谢 function addLink
  • 抑制数组列表添加方法管道输出

    我正在使用数组列表来构建日志项序列以供稍后记录 工作起来很不错 但是 Add 方法将当前索引发送到管道 我可以通过将其发送到 null 来解决这个问题 如下所示 strings Add junk gt null 但我想知道是否有某种机制可以
  • 如何在 Powershell 中自动对提示回答“是”?

    如何在 PowerShell 会话中输入 是 作为交互式问题的答案 我知道 在 Bash 中 Yes是在提示上回答 是 的工具 在我的情况下 我无法抑制提示 我正在运行的脚本停止于 如果您想继续 请回复 是 powershell 如何运行脚
  • Get-AzureStorageBlob 抛出找不到您的 azure 存储凭据

    我刚刚开始使用 Azure 在使用 PowerShell cmdlet 处理我的存储帐户时遇到问题 我已经创建了一个存储帐户并在该存储帐户中创建了一个容器 接下来 我安装了 Azure Powershell SDK 和命令让等 并导入了pu

随机推荐

  • 如何从节点服务器发送 Firebase 云消息传递?

    有什么办法可以发送通知吗FCM from a node js server 我在文档中没有找到任何有关它的内容 通过 Firebase Cloud Messaging 发送消息需要调用 HTTP 端点 如发送下游消息的文档 https fi
  • Python 中 Goto 标签的替代方案?

    我知道我不能使用 Goto 我也知道 Goto 不是答案 我读过类似的问题 但我只是想不出解决我的问题的方法 所以 我正在编写一个程序 你必须在其中猜测一个数字 这是我遇到问题的部分的摘录 x random randint 0 100 I
  • 如何在 Elixir 或 Phoenix 框架中安排代码每隔几个小时运行一次?

    假设我想每 4 小时发送一堆电子邮件或重新创建站点地图或其他任何内容 我该如何在 Phoenix 或仅使用 Elixir 做到这一点 有一个简单的替代方案 不需要任何外部依赖项 defmodule MyApp Periodically do
  • 离子和电容器 - Android 启动画面响应能力

    Context 这与闪屏图像响应能力有关 根据我的研究 它之所以发生是因为缺少文档电容器文档 启动画面 https capacitorjs com docs apis splash screen Problem 当实现电容器的闪屏插件时 问
  • 在 JavaScript 中给变量字符串加上引号

    我有一个 JavaScript 变量 var text http example com 文本可以是多个链接 如何在变量字符串周围放置 例如 我希望字符串看起来像这样 http example com var text http examp
  • 遍历 globals() 字典

    我 尝试 使用globals 在我的程序中迭代所有全局变量 我就是这样做的 for k v in globals iteritems function k v 当然 这样做时 我只是创建了另外 2 个全局变量 k and v 所以我得到这个
  • 为 MoonAPNS 创建 p12 文件时卡住了

    我在创建 p12 证书时遇到一些问题 我之前创建了一个带有推送通知的应用程序 效果很好 应用程序获取用户设备 ID 并将其保存到数据库中 我已将代码添加到我的新应用程序中 并进行了与新应用程序一起使用的修改 从日志来看 它的工作方式似乎与我
  • 如何以编程方式使用 TestNG 运行 Selenium Java 测试?

    我使用 Selenium RC 和 Java 使用 TestNG 作为测试框架 我使用 Eclipse 作为 IDE 我想非常轻松地从我自己的程序中调用 TestNG 我怎样才能做到这一点 我的以下 Java 代码运行良好 Test pub
  • Angular 8 - 删除 ng-component 标签 - 表行模板

    我有一个灵活的表格组件 有两种模式 普通表 有效 自定义行模板 这不是因为角度添加
  • firebase函数链中间件

    有没有办法像 Express 一样在 普通 firebase 函数上链接中间件 ordinary 功能 addNote https onRequest req res next gt addNote req res next using e
  • 打包用来部署跨平台?

    在 Windows 上 应用程序通常打包为 MSI 在 Redhat Linux 上打包为 RPM 可用于将应用程序部署到所有平台 包括不同风格的 UNIX 和 Windows 的最佳开源打包方法是什么 内容包括 exe unix 二进制文
  • 多个指令 [myPopup、myDraggable] 请求新的/隔离的范围

    我编写了一个对话框指令 myPopup 和另一个用于拖动此对话框的指令 myDraggable 但我总是收到错误 多个指令 myPopup myDraggable 请求新的 隔离的范围 这是一个笨蛋 http plnkr co edit k
  • 从 Julia 中的文本文件读取数据矩阵

    我有一个包含矩阵的文本文件 我想在朱莉娅中将其作为矩阵来阅读 文本文件如下 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 0 在 matlab 中 您可以执行以下操作来创建矩阵M
  • Cloudfront函数总是返回503

    如何为 Cloudfront 上的静态托管网站的子目录设置默认根对象 https stackoverflow com questions 31017105 how do you set a default root object for s
  • 基于动态集合视图的 UITableView 的动态高度

    我必须添加一个UICollectionView里面一个UITableViewCell The collectionView可以有不同数量的项目 所以collectionView应在内部适当调整tableView 我已经在我的项目中实现了这个
  • 在 Android 应用程序中读取 CSV 文件

    我正在开发一个概念验证应用程序 以便我可以在我正在制作的更大的应用程序中实现该功能 我对 Java 和 Android 开发有点陌生 但希望这个问题不会太简单或太复杂 基本上 我试图从 CSV 文件中读取字符串列表 并使其可用于在应用程序的
  • jquery 工具提示在我的页面中添加 div role="log"

    我对 jquery tooltip 有一个奇怪的问题 我正在使用下面的代码
  • Kubernetes 1.8 支持的 Docker 版本

    我要将我的 Kubernetes 集群升级到该版本1 8 7 有谁知道哪个 docker 版本与其最兼容 这是我在 Kubernetes 官方页面上找到的 但我想它可能是针对最新的 k8s 版本的 1 9 在每台计算机上安装 Docker
  • 如何在中间人的部分内容中渲染部分内容

    我有一些 Haml 部分 其中许多包含样板 container row col lg 12 当我尝试将其抽象出来时 partial site section I get syntax error unexpected keyword end
  • Powershell 范围处理 v2/v3 的未记录更改?

    背景 我一直在编写一个 powershell 脚本 用于将文件从 Windows Server 08 使用 Powershell 2 x 上的 Sharpoint 2010 实例迁移到 Windows Server 12 使用 Powers