首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让这个foreach-object正确运行?

如何让这个foreach-object正确运行?
EN

Stack Overflow用户
提问于 2015-05-23 09:17:19
回答 1查看 62关注 0票数 0

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

到目前为止,我有这样的想法:

代码语言:javascript
复制
$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'保持不变。我猜我的渠道是错的。如果我能澄清一些更好的东西,请告诉我。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-05-23 19:59:06

事实上,您根本不需要ForEach-Object

代码语言:javascript
复制
$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
        $testRDP -replace 'remoteapp.address.com', $remoteAPP -replace 'user', $aliasRDP | 
Out-File C:\Users\Administrator.PT\Desktop\$rdpName
        }
}

下面是使用正则表达式匹配和替换字符串的版本。它更安全,因为原始脚本将替换文件中任何位置的匹配项,这可能是致命的。

代码语言:javascript
复制
$testRDP = (Get-Content -Path 'C:\Users\Administrator.PT\Desktop\Test.rdp')
$companyNames = Import-Csv -Path '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
            $testRDP -replace '^(full address:s:).*$', "`$1$remoteAPP" -replace '^(username:s:).*$', "`$1$aliasRDP" |
                Out-File -FilePath "C:\Users\Administrator.PT\Desktop\$rdpName"
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30407932

复制
相关文章

相似问题

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