首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用powershell脚本中的“mstsc”打开多个远程会话

使用powershell脚本中的“mstsc”打开多个远程会话
EN

Stack Overflow用户
提问于 2020-11-19 22:34:44
回答 1查看 642关注 0票数 0

我正在尝试编写一个powershell脚本,该脚本为保存在文本文件中的每个机器名称打开一个远程桌面连接。当我运行脚本时,它只连接到列表中的第一台机器,并输出到控制台:CMDKEY: Credential added successfully一次(不是每台机器一次)。mstcs似乎在执行之后终止了进程,我不确定我是否以正确的方式添加了凭据。谁能给我指明正确的方向?

下面是一些我试图弄清楚发生了什么的测试:

  • 打印在mstsc之后。不会打印。进程似乎在调用mstcs之后终止。这似乎是issue.
  • cmdkey /list的关键所在,它显示了我存储的所有凭据及其目标。输出不包括文本文件中定义的所有目标。即使我注释掉了mstsc,那么cmdkey /add:$MachineName /user:$User /pass:$Password似乎只执行第一行,这可以从缺少更多的控制台输出和cmdkey /list没有产生预期的目标来证明。此外,我在这个cmdkey行之后添加了一个print语句,它为每一行打印,所以它不会在运行后终止(我已经知道了,因为mstcs在没有注释掉的情况下会在该行之后执行)。

代码语言:javascript
复制
# Read from file
$Lines = Get-Content -Path .\machines.txt | Out-String

# For each machine ...
foreach($Line in $Lines){
    # Split line, save name and domain
    $Tokens = $Line.Split(".")

    $MachineName = $Tokens[0]
    $Domain = $Tokens[1]
    $User = "someDomain\someUsername"
    $Password="somePassword"

    # Switch username if someOtherDomain
    if ($Domain -eq "someOtherDomain"){
        $User = "someOtherDomain\someOtherUsername"
    }

    #set credentials and open connection
    cmdkey /add:$MachineName /user:$User /pass:$Password
    mstsc /v:$MachineName /console
}

编辑:我也尝试过用Start-Process -FilePath "$env:windir\system32\mstsc.exe" -ArgumentList "/v:$MachineName" -Wait代替mstsc /v:$MachineName。结果是打开会话,然后脚本在控制台中没有完成,但是没有发生任何额外的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-19 23:42:17

这种行为是由您使用Out-String引起的。

Get-Content输出多个字符串,文件中每一行一个--但是Out-String将它们拼接回一个多行字符串中:

代码语言:javascript
复制
PS C:\> $machines = Get-Content machines.txt
PS C:\> $machines.GetType().Name   # definitely an array
Object[]
PS C:\> $machines.Count            # multiple strings in there
4
PS C:\> $machines = Get-Content machines.txt | Out-String
PS C:\> $machines.GetType().Name   # now it's just a single string
String

因此,您的foreach(){}循环只运行一次,$MachineName的值不再是一台机器的名称,而是一个多行字符串,同时包含所有这些字符串--这可能就是为什么mstsc立即退出的原因:)

从第一行中删除|Out-String,循环就可以工作了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64921047

复制
相关文章

相似问题

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