标签: invoke-command

PowerShell SCript使用参数执行CMD.exe

因此,我已经浏览了该站点和Web,感觉好像缺少了一些简单的东西。

我发现相关问题,但是没有一个问题scriptblock与第3方应用程序(不是简单的Windows函数或应用程序)的远程调用相结合

我有以下字符串,可以将其复制到命令窗口中,并且可以正常运行

"C:\Program Files (x86)\Vizient\Vizient Secure Channel v2.1\VizientSC.exe" UID=me@musc.edu PWD=XXXXXXXXX HCOID=123456 PRODTYPE=PRO-UHCSECURECHANNEL-CDB PACKAGETYPE=OTH FOLDERPATH="\\da\db5\MyFiles\Viz\20180413"
Run Code Online (Sandbox Code Playgroud)

为了简化这一过程,我们假设我想每次使用REMOTE调用时都运行相同的String。

我已经写了许多不同的方法,但是使用却无济于事

Invoke-Command -ComputerName "edwsql" -ScriptBlock { .........
Run Code Online (Sandbox Code Playgroud)

我只想在远程计算机上使用cmd.exe运行指定的字符串。

在字符串中运行的EXE是第三方软件,我不想安装所有可能的位置。从已安装且安全的盒子运行远程要容易得多。

有人可以指出我正确的方向吗????请问 我是PowerShell的新手。我正在尝试淘汰一些旧的PERL,因为在这几天之间,支持客户网站上的支持的人很少。

powershell cmd invoke-command

2
推荐指数
1
解决办法
1887
查看次数

如何调用命令并将路径作为参数传递给命令

我试图调用命令撕裂我的头发但是将路径作为参数传递给exe

例如:我想接受这个命令

powershell Invoke-Command -ComputerName localhost -ScriptBlock { param($command ) C:\windows\system32\getmac.exe /$command } -ArgumentList ?
Run Code Online (Sandbox Code Playgroud)

并将其翻译成这样的形式

powershell Invoke-Command -ComputerName localhost -ScriptBlock { param($path, $command ) $path\getmac.exe /$command } -ArgumentList C:\windows\system32,?
Run Code Online (Sandbox Code Playgroud)

我已经尝试过各种引用,&符号和其他扭曲,但不能让它起作用.上述尝试导致

表达式或语句中出现意外的标记'\ getmac.exe'.在行:1 char:97

(我真的不想在localhost上调用getmac,这是runnable,SO的蒸馏版本)

powershell invoke-command

1
推荐指数
1
解决办法
2万
查看次数

如何使用Invoke-Command cmdlet传递变量?

我必须从某些服务器获取事件日志,我不想读取找到的每个服务器的凭据.

我试图通过使用ArgumentList参数传递我的变量,但我不工作.

这是我的代码:

$User = Read-Host -Prompt "Enter Username"
$Password = Read-Host -Prompt "Enter Password" -AsSecureString
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)
$UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

Get-ADComputer -Filter "OperatingSystem -Like '*Server*'" | Sort-Object Name |
ForEach-Object{
    if($_.Name -like '*2008*'){
        Invoke-Command -ComputerName $_.Name -ArgumentList $User, $UnsecurePassword -ScriptBlock {  
            net use P: \\Server\dir1\dir2 /persistent:no /user:$User $UnsecurePassword
            Get-EventLog -LogName System -After (Get-Date).AddHours(-12) -EntryType Error, Warning | format-list | 
            out-file P:\EventLog_$env:COMPUTERNAME.log
            net use P: /delete /yes
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在Invoke-Command ScriptBlock中使用变量?

variables powershell invoke-command

1
推荐指数
2
解决办法
7926
查看次数

运行 Invoke-Command 后访问脚本块中定义的变量

我会尽量使这个例子简单。

$myValues = {
    $value1 = "hello"
    $value2 = "world"
}

Invoke-Command $myValues
Run Code Online (Sandbox Code Playgroud)

如何访问$value1$value2Invoke-Command执行?

编辑:我试图解决的问题是我必须在$myValues整个脚本中多次初始化变量。所以我想我会在顶部定义一次脚本块,然后Invoke-Command$myVariables需要重新初始化变量时简单地调用。

powershell invoke-command

1
推荐指数
1
解决办法
718
查看次数

如何在powershell中解析json响应

设法获得JSON数据

$R= Invoke-WebRequest -Uri $url -Headers $headers -ContentType "application/json"   -Method Get -UseBasicParsing
$x = $R.Content | Out-String | ConvertFrom-Json 
Run Code Online (Sandbox Code Playgroud)

现在我有一个像这样的JSON文件:

{
  "id": 1000,
  "name_with_namespace": "myProjectName1",

},
{
  "id": 1001,
  "name_with_namespace": "myProjectName2",

},
{
  "id": 1002,
  "name_with_namespace": "myProjectName3",

}
Run Code Online (Sandbox Code Playgroud)

现在我需要提取所有出现的地方"name_with_namespace""id"地点"name_with_namespace" = "myProjectName.*"

我该如何一次性完成?

我试过这个:

foreach ($name in $x.name_with_namespace) {
    if ( $name -match ".*myProjectName.*" ) {    
        write-host "$name - $x.id"               
    }   
}
Run Code Online (Sandbox Code Playgroud)

但我得到了这个:

myProjectName1 1000 1001 1002
myProjectName2 1000 1001 1002
myProjectName3 1000 1001 1002
Run Code Online (Sandbox Code Playgroud)

我知道问题出在$ …

iteration powershell invoke-command

1
推荐指数
1
解决办法
5247
查看次数

源代码中字符串文字的字符编码问题(utf8 无 bom)

$logstring = Invoke-Command -ComputerName $filesServer   -ScriptBlock {\n        param(\n            $logstring,\n            $grp\n        )\n\n    $Klassenbuchordner = "KB " + $grp.Gruppe\n    $Gruppenordner = $grp.Gruppe\n    $share = $grp.Gruppe\n    $path = "D:\\Gruppen\\$Gruppenordner"\n\n    if ((Test-Path D:\\Dozenten\\01_Klassenb\xc3\xbccher\\$Klassenbuchordner) -eq $true)\n    {$logstring += "Verzeichnis f\xc3\xbcr Klassenb\xc3\xbccher existiert bereits"}\n    else {\n        mkdir D:\\Dozenten\\01_Klassenb\xc3\xbccher\\$Klassenbuchordner\n        $logstring += "Klassenbuchordner wurde erstellt!"\n    }} -ArgumentList $logstring, $grp\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的目标是测试目录是否存在并根据需要创建它。

\n\n

问题是路径包含德文字母(元音变音),目标服务器无法正确识别这些字母。

\n\n

例如,服务器收到路径"D:\\Dozent\\01_Klassenb\xc3\x83\xc2\xbccher"而不是预期的"D:\\Dozent\\01_Klassenb\xc3\xbccher".

\n\n

如何强制使用正确的 UTF-8 编码?

\n

powershell utf-8 character-encoding codepages invoke-command

1
推荐指数
1
解决办法
2193
查看次数

测试连接和变量

$server = "SOME_SERVER"
$target = "8.8.8.8"
Invoke-Command -ComputerName $server -ScriptBlock { Test-Connection -ComputerName $target }
Run Code Online (Sandbox Code Playgroud)

所以我有这个代码,它给我一个错误

无法验证参数'ComputerName'的参数.参数为null或空.提供非null或空的参数,然后再次尝试该命令.

奇怪的是,如果我换$target8.8.8.8最后一行,一切都很好.

有人可以向我解释一下吗?我一直在努力争取一个小时,并搜索互联网寻找答案,但没有找到任何解决方案.这是PowerShell中的某种错误吗?

BTW - 如果我调用$target它,它给了我8.8.8.8,类型是String,所以......

variables powershell null invoke-command

0
推荐指数
1
解决办法
616
查看次数