首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Synax突出显示动态Scriptblock

Synax突出显示动态Scriptblock
EN

Stack Overflow用户
提问于 2014-03-01 00:10:47
回答 1查看 100关注 0票数 1

我以下面的方式创建一个动态命令,这样我就可以使用本地函数和变量,并通过Invoke- ScriptBlock轻松地将它们传递给远程计算机。问题是,由于Create中的所有文本都用双引号括起来,我取消了所有语法突出显示,因为所有编辑器都将代码视为一个大字符串。

虽然这只是一个表面上的问题,但我希望找到一种解决方法,允许我的代码在不使用双引号的情况下通过。我试着在Create中传递一个变量,而不是实际的文本,但是它不能被解释。

代码语言:javascript
复制
function local_admin($a, $b) {
([adsi]"WinNT://localhost/Administrators,group").Add("WinNT://$a/$b,user")
}

$SB = [ScriptBlock]::Create(@"

    #Define Function
    function local_admin {$Function:local_admin}

    local_admin domain username
"@)


Invoke-Command -ComputerName server2 -ScriptBlock $SB
EN

回答 1

Stack Overflow用户

发布于 2014-03-01 00:20:02

您可以使用以下示例将该函数传递到远程会话中。这允许您使用大括号定义ScriptBlock,而不是将其定义为字符串。

代码语言:javascript
复制
# Define the function
function foo {
    "bar";
}

$sb = {
    # Import the function definition into the remote session
    [void](New-Item -Path $args[0].PSPath -Value $args[0].Definition);
    # Call the function
    foo;
    };

#(gi function:foo) | select *
Invoke-Command -ComputerName . -ScriptBlock $sb -ArgumentList (Get-Item -Path function:foo);

这是你的函数的一个修改版本。请注意,可以使用-ArgumentList参数将域和用户名动态传递到远程ScriptBlock中。我使用$args自动变量将对象传递给ScriptBlock

代码语言:javascript
复制
function local_admin($a, $b) {
    ([adsi]"WinNT://localhost/Administrators,group").Add("WinNT://$a/$b,user")
}

$SB = {
    #Define Function
    [void](New-Item -Path $args[0].PSPath -Value $args[0].Definition);
    # Call the function
    local_admin $args[1] $args[2];
}

Invoke-Command -ComputerName server2 -ScriptBlock $SB -ArgumentList (Get-Item -Path function:local_admin), 'domain', 'username';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22100163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档