【问题标题】:Pass Powershell script to batch file将 Powershell 脚本传递给批处理文件
【发布时间】:2023-01-23 22:07:00
【问题描述】:

我正在尝试创建一个有效的 PowerShell 脚本。但是,它在函数中并不能完全正确地工作,我们认为这是格式类型的问题。

你能帮我把这个函数传递给 cmd/batch 命令吗?

$datos = quser
foreach($id in $datos)
{
    $nom = ""
    $userid = $id -split '\s+'
    $ad = $userid[0].Replace(">","")
    if ($ad -eq $usuario)
    {
        $nom = $ad
        $userid[2]
    }
}

这是一个仅从quser 命令实用程序获取 ID 的功能。

【问题讨论】:

  • 欢迎来到 StackOverflow!不幸的是,您的问题缺少一些信息。如何涉及批处理文件?你想让我做什么?什么是成功,什么是失败?请提供不在 cmets 中的更多信息。相反,编辑您的问题并更新读者可能有助于找到答案的所有内容。

标签: powershell cmd


【解决方案1】:

此 PowerShell 将从 quser.exe 输出活动控制台会话 ID。保存到文件 Get-Qusers.ps1

$pattern = '(?<username>.*?) {2,}(?<sessionname>.*?) {2,}(?<id>.*?) {2,}(?<state>.*?) {2,}(?<idletime>.*?) {2,}(?<logontime>.*?)$'
$quser = quser.exe

($quser | Select-String -Pattern $pattern ).Matches | Select-Object -Skip 1 | ForEach-Object {
    [PSCustomObject]@{
        Username    = $_.Groups['username'].Value.Trim() -replace '>'
        Sessionname = $_.Groups['sessionname'].Value
        Id          = $_.Groups['id'].Value
        State       = $_.Groups['state'].Value
        IdleTime    = $_.Groups['idletime'].Value
        LogonTime   = $_.Groups['logontime'].Value
    }
} |
    Where-Object { $_.Sessionname -eq 'console' } |
    Select-Object -ExpandProperty Id


在批处理文件中运行 ps1 脚本并将 Id 保存到变量

echo off
FOR /F "tokens=*" %%g IN ('powershell.exe -f get-qusers.ps1') do (SET QuserId=%%g)
echo %QuserId%

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多