Powershell 如何使此foreach对象正确运行?

Powershell 如何使此foreach对象正确运行?,powershell,pipeline,Powershell,Pipeline,我正在尝试读取列为CompanyName、UserCount的.csv,并编辑一个.rdp文件。输出应该创建多个.rdp文件,同时更改.rdp本身和名称中的3行 到目前为止,我有: $testRDP = (Get-Content C:\Users\Administrator.PT\Desktop\Test.rdp) $remoteAPP = @() $rdpName = @() $companyNames=Import-Csv C:\Users\Administrator.PT\Desktop\

我正在尝试读取列为
CompanyName、UserCount
的.csv,并编辑一个.rdp文件。输出应该创建多个.rdp文件,同时更改.rdp本身和名称中的3行

到目前为止,我有:

$testRDP = (Get-Content C:\Users\Administrator.PT\Desktop\Test.rdp)
$remoteAPP = @()
$rdpName = @()
$companyNames=Import-Csv C:\Users\Administrator.PT\Desktop\CompanyNames.csv
foreach ($name in $companyNames) {
    for ($i = 1; $i -le $name.UserCount; $i++) {
        $remoteAPP = "RemoteApp" + $name.CompanyName + ".address.com"
        $rdpName = $name.CompanyName + $i + ".rdp"
        $aliasRDP = $name.CompanyName + $i
        ForEach-Object {$testRDP -replace 'remoteapp.address.com', $remoteAPP}
        ForEach-Object {$testRDP -replace 'user', $aliasRDP} | 
Out-File C:\Users\Administrator.PT\Desktop\$rdpName
        }
}
运行此命令将
'user'
替换为
$aliasRDP
,但
'remoteapp.address.com'
保持不变。 我猜我的管道是错的。如果我能澄清一些更好的事情,请告诉我


谢谢。

事实上,每个对象都不需要

$testRDP=(获取内容C:\Users\Administrator.PT\Desktop\Test.rdp)
$remoteAPP=@()
$rdpName=@()
$companyNames=导入Csv C:\Users\Administrator.PT\Desktop\companyNames.Csv
foreach($companyNames中的名称){
对于($i=1;$i-le$name.UserCount;$i++){
$remoteAPP=“remoteAPP”+$name.CompanyName+”.address.com
$rdpName=$name.CompanyName+$i+“.rdp”
$aliasRDP=$name.CompanyName+$i
$testRDP-替换'remoteapp.address.com',$remoteapp-替换'user',$aliasRDP|
输出文件C:\Users\Administrator.PT\Desktop\$rdpName
}
}
下面是使用正则表达式匹配和替换字符串的版本。它更安全,因为原始脚本将替换文件中任何地方的匹配项,这可能是致命的

$testRDP=(获取内容-路径'C:\Users\Administrator.PT\Desktop\Test.rdp')
$companyNames=导入Csv-路径'C:\Users\Administrator.PT\Desktop\companyNames.Csv'
foreach($companyNames中的名称){
对于($i=1;$i-le$name.UserCount;$i++){
$remoteAPP='remoteAPP'+$name.CompanyName+'.address.com'
$rdpName=$name.CompanyName+$i+'.rdp'
$aliasRDP=$name.CompanyName+$i
$testRDP-替换“^(完整地址:s:).*$”、“`1$remoteAPP”-替换“^(用户名:s:).*$”、“`1$aliasRDP”|
输出文件-文件路径“C:\Users\Administrator.PT\Desktop\$rdpName”
}
}

事实上,您根本不需要为每个对象设置

$testRDP=(获取内容C:\Users\Administrator.PT\Desktop\Test.rdp)
$remoteAPP=@()
$rdpName=@()
$companyNames=导入Csv C:\Users\Administrator.PT\Desktop\companyNames.Csv
foreach($companyNames中的名称){
对于($i=1;$i-le$name.UserCount;$i++){
$remoteAPP=“remoteAPP”+$name.CompanyName+”.address.com
$rdpName=$name.CompanyName+$i+“.rdp”
$aliasRDP=$name.CompanyName+$i
$testRDP-替换'remoteapp.address.com',$remoteapp-替换'user',$aliasRDP|
输出文件C:\Users\Administrator.PT\Desktop\$rdpName
}
}
下面是使用正则表达式匹配和替换字符串的版本。它更安全,因为原始脚本将替换文件中任何地方的匹配项,这可能是致命的

$testRDP=(获取内容-路径'C:\Users\Administrator.PT\Desktop\Test.rdp')
$companyNames=导入Csv-路径'C:\Users\Administrator.PT\Desktop\companyNames.Csv'
foreach($companyNames中的名称){
对于($i=1;$i-le$name.UserCount;$i++){
$remoteAPP='remoteAPP'+$name.CompanyName+'.address.com'
$rdpName=$name.CompanyName+$i+'.rdp'
$aliasRDP=$name.CompanyName+$i
$testRDP-替换“^(完整地址:s:).*$”、“`1$remoteAPP”-替换“^(用户名:s:).*$”、“`1$aliasRDP”|
输出文件-文件路径“C:\Users\Administrator.PT\Desktop\$rdpName”
}
}

事实上,您根本不需要为每个对象设置

$testRDP=(获取内容C:\Users\Administrator.PT\Desktop\Test.rdp)
$remoteAPP=@()
$rdpName=@()
$companyNames=导入Csv C:\Users\Administrator.PT\Desktop\companyNames.Csv
foreach($companyNames中的名称){
对于($i=1;$i-le$name.UserCount;$i++){
$remoteAPP=“remoteAPP”+$name.CompanyName+”.address.com
$rdpName=$name.CompanyName+$i+“.rdp”
$aliasRDP=$name.CompanyName+$i
$testRDP-替换'remoteapp.address.com',$remoteapp-替换'user',$aliasRDP|
输出文件C:\Users\Administrator.PT\Desktop\$rdpName
}
}
下面是使用正则表达式匹配和替换字符串的版本。它更安全,因为原始脚本将替换文件中任何地方的匹配项,这可能是致命的

$testRDP=(获取内容-路径'C:\Users\Administrator.PT\Desktop\Test.rdp')
$companyNames=导入Csv-路径'C:\Users\Administrator.PT\Desktop\companyNames.Csv'
foreach($companyNames中的名称){
对于($i=1;$i-le$name.UserCount;$i++){
$remoteAPP='remoteAPP'+$name.CompanyName+'.address.com'
$rdpName=$name.CompanyName+$i+'.rdp'
$aliasRDP=$name.CompanyName+$i
$testRDP-替换“^(完整地址:s:).*$”、“`1$remoteAPP”-替换“^(用户名:s:).*$”、“`1$aliasRDP”|
输出文件-文件路径“C:\Users\Administrator.PT\Desktop\$rdpName”
}
}

事实上,您根本不需要为每个对象设置

$testRDP=(获取内容C:\Users\Administrator.PT\Desktop\Test.rdp)
$remoteAPP=@()
$rdpName=@()
$companyNames=导入Csv C:\Users\Administrator.PT\Desktop\companyNames.Csv
foreach($companyNames中的名称){
对于($i=1;$i-le$name.UserCount;$i++){
$remoteAPP=“remoteAPP”+$name.CompanyName+”.address.com
$rdpName=$name.CompanyName+$i+“.rdp”
$aliasRDP=$name.CompanyName+$i
$testRDP-替换'remoteapp.address.com',$remoteapp-替换'user',$aliasRDP|
输出文件C:\Users\Administrator.PT\Desktop\$rdpName
}
}
下面是使用正则表达式匹配和替换字符串的版本。它更安全,因为原始脚本将替换文件中任何地方的匹配项,这可能是致命的

$testRDP=(获取内容-路径'C:\Users\Administrator.PT\Desktop\Test.rdp')
$companyNames=导入Csv-路径'C:\Users\Administrator.PT\Desktop\companyNames.Csv'
foreach($companyNames中的名称){
对于($i=1;$i-le$name.U)