You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以安装WSL的其他用户身份执行函数并捕获输出赋值给变量

实现方案

你可以通过PowerShell自带的凭据执行能力直接捕获输出,无需使用独立进程的runas命令,以下是两种可用方案:

方案1:临时交互执行(推荐)

  • 先获取目标用户的凭据对象,执行时会弹出密码输入弹窗:
# 替换为实际的目标用户名
$targetCred = Get-Credential 目标用户名
  • 直接通过带凭据的作业执行函数,捕获返回结果:
$wslIp = Start-Job -Credential $targetCred -ScriptBlock {
    function Get-WSLIP {
        wsl -- ip -o -4 -json addr list eth0 `
        | ConvertFrom-Json `
        | %{ $_.addr_info.local } `
        | ?{ $_ }
    }
    return Get-WSLIP
} | Wait-Job | Receive-Job

# 执行完成后$wslIp变量就是目标用户身份查询到的WSL IP地址

该方案无需提前配置WinRM服务,本地直接可用。

方案2:非交互自动化执行

如果需要脚本自动执行不需要手动输入密码,可以提前将加密后的凭据存在本地(仅当前Windows用户可解密,安全度高):

  1. 首次执行时保存凭据到本地:
Get-Credential 目标用户名 | Export-Clixml -Path "$env:APPDATA\wsl_target_cred.xml"
  1. 后续脚本直接读取凭据执行即可:
$targetCred = Import-Clixml -Path "$env:APPDATA\wsl_target_cred.xml"
$wslIp = Invoke-Command -Credential $targetCred -ScriptBlock {
    wsl -- ip -o -4 -json addr list eth0 | ConvertFrom-Json | %{ $_.addr_info.local } | ?{ $_ }
}

注意事项

  • 请确保目标用户已经完成WSL初始化,且执行查询时WSL实例处于运行状态,否则返回结果为空
  • 如果目标用户的WSL实例默认网卡不是eth0,请将脚本中的网卡名替换为实际使用的网卡名

内容的提问来源于stack exchange,提问作者dza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:06:05