相关疑难解决方法(0)

如何在PowerShell中将输出捕获到外部进程的变量中?

我想运行一个外部进程并将其命令输出捕获到PowerShell中的变量.我目前正在使用这个:

$params = "/verify $pc /domain:hosp.uhhg.org"
start-process "netdom.exe" $params -WindowStyle Hidden -Wait
Run Code Online (Sandbox Code Playgroud)

我已经确认命令正在执行但我需要将输出捕获到变量中.这意味着我无法使用-RedirectOutput,因为这只会重定向到文件.

powershell process

140
推荐指数
7
解决办法
24万
查看次数

将参数从 Powershell 传递到批处理脚本

我需要将带有特殊字符的密码从 powershell 脚本automation.ps1传递到批处理脚本batch_script.bat,然后通过管道将其传输到main.py. 从batch_script.batto管道main.py工作正常,即身份验证成功。但是,当我运行上述整个过程时,身份验证失败,但echoing the password 显示正确的密码字符串。

我的猜测是特殊字符存在问题。传递这些字符串的安全方法是什么?

背景

我想通过 Python 脚本从某些外部源自动执行每日下载main.py。此过程需要密码。所以我写了一个batch_script.bat在提示输入密码时将密码传递给 Python 脚本的方法。但是,我不想将密码作为纯文本存储在批处理脚本中,所以我加密了密码并编写了另一个层automation.ps1来解密密码并将其作为纯文本传递给batch_script.bat.

自动化.ps1

# get password
$securePassword = Get-Content "<file_path>" | ConvertTo-SecureString
$credentials = New-Object System.Management.Automation.PsCredential("<user_name>",$securePassword)
$unsecurePassword = ($credentials).GetNetworkCredential().Password

# call script
$script = "<path>\batch_script.bat"
$args = @("`"<user name>`"","`"$unsecurePassword`"")
start-process $script $args
Run Code Online (Sandbox Code Playgroud)

批处理脚本.bat

(我知道在这个例子中我丢弃了传递的用户名,只是想保留我传递多个参数的事实,以防与它有任何相关性)

@echo off
SET username=%~1
SET password=%~2
echo(%password%|python main.py
Run Code Online (Sandbox Code Playgroud)

windows powershell batch-file

6
推荐指数
2
解决办法
1144
查看次数

Powershell避免cmd 8191字符限制

我正在创建一个 PowerShell,它使用以下命令运行一个简单的 Java 程序:

Start-Process -filepath .\java.exe -ArgumentList "Input" -NoNewWindow
Run Code Online (Sandbox Code Playgroud)

在本例中,Input 类只是接受并打印一个字符串。

我期望长度大于cmd.exe8191 个字符限制的字符串,因此我需要在 PS 中运行它。

当前场景:

  • 在 PS 中直接运行上述命令可以工作并Input接受大于 8191 个字符的字符串。
  • 将命令保存在 ps1 文件中并运行它,会出现一个 PS 窗口,但 cmd 在达到 8191 个字符限制时在幕后运行。

-Wait也尝试添加,但运气不佳。

任何想法?

powershell cmd max

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

CMD管道与Powershell管道不同?

我正在尝试将 Node.js 输出通过管道传输到 preatty-pino

node .\dist\GameNode.js | pino-pretty

在 CMD 中运行它我得到了我的格式化输出但是在 powershell 中运行它我什么也得不到。我读到 Powershell 在管道时正在使用对象,所以我试过了

node .\dist\GameNode.js | Out-String -Stream | pino-pretty

但这也行不通。

为什么它可以在 CMD 中工作,而不能在 Powershell 中工作?谢谢 :)

powershell cmd pipe

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

PowerShell 脚本添加“--prod”参数来构建 Angular CLI 项目

我正在创建 PowerShell 脚本来自动构建 Angular CLI 项目。当我在 .ps1 文件中使用此命令时:

Start-Process -FilePath ng build -WorkingDirectory D:\pathToAngularProject -Wait
Run Code Online (Sandbox Code Playgroud)

它工作完美,但创建的 JavaScript 构建并不丑陋。为了能够创建生产版本,我需要添加“--prod”参数。但是当我更改上面的示例时:

Start-Process -FilePath ng build -ArgumentList '--prod' -WorkingDirectory D:\pathToAngularProject -Wait
Run Code Online (Sandbox Code Playgroud)

我收到错误: 在此输入图像描述

有谁建议我如何在 PowerShell 脚本中向“ng build”命令添加参数?

powershell angular-cli angular

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

将参数字符串转换为 Here 字符串

我想用 Start-Process 和 -Wait 调用 ffmpeg,$ArgumentList 有问题

function convertgif {
  
  $ArgumentList = @'
 -i $($args[0]) -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" "$([IO.Path]::ChangeExtension($args[0], 'mp4'))"
'@
  Start-Process -FilePath "C:\ffmpeg\bin\ffmpeg.exe" -ArgumentList $ArgumentList -Wait -NoNewWindow;
}
Run Code Online (Sandbox Code Playgroud)

我找不到如何修复错误

$args[0]: No such file or directory
Run Code Online (Sandbox Code Playgroud)

powershell

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

启动进程、调用命令还是?

使用该程序可以得到您的支持或 GYB。我运行以下命令

Start-Process -FilePath 'C:\Gyb\gyb.exe' -ArgumentList @("--email <Email Address>", "--action backup", "--local-folder $GYBfolder", "--service-account", "--batch-size 4") -Wait
Run Code Online (Sandbox Code Playgroud)

问题是,当该过程完成时,我的脚本未完成。

$GYBfolder = $GYBfolder.Replace('"', "")
$output = [PSCustomObject]@{
    Name   = $SourceGYB
    Folder = $GYBfolder
}

$filename = "C:\reports\" + $SourceGYB.Split("@")[0] + "_Backup.csv"

$output | Export-Csv $filename -NoTypeInformation | Format-Table text-align=left -AutoSize
Return $filename
Run Code Online (Sandbox Code Playgroud)

由于某种原因,脚本在返回之前停止。我很想知道我是否应该使用不同的命令来运行 GYB?关于为什么脚本不处理返回的任何想法?

powershell

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

我如何在 Powershell 中运行它?

这是在命令提示符下工作的命令。

C:\Temp\Agent.exe CustomerId={9c0-4ab1-123-102423a} ActivationId={9c0-4ab1-123-102423a} WebServiceUri=https://Agent/
Run Code Online (Sandbox Code Playgroud)

这是错误。(我尝试过调用命令和参数,但我认为 { 引起了问题。

错误:Agent.exe:已指定命令参数。

powershell

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

我怎样才能运行一个批处理文件大约 1000 次,然后我想要平均执行时间作为输出。这可能吗?

我尝试遵循 powershell-command,但随后打开了 1000 个窗口并且 powershell ISE 崩溃了。有没有办法在后台运行批处理文件 1000 次?有没有更聪明的方法来获得平均执行时间?

这是我试过的代码:

cd C:\scripts
Measure-Command { 
    for($i = 0;$i -lt 1000;$i++){
      Start-Process -FilePath "C:\scripts\open.bat"
    }
}
Run Code Online (Sandbox Code Playgroud)

powershell average batch-file execution-time

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