我目前正在编写一个脚本,用于读取工作站上的标准打印机并将其写入文本文件。现在我需要转换或剪切输出字符串并将其写入另一个文件,以便将cutted字符串设置为新的默认打印机。
e.g。第一个文本文件内容是这样的:
\ NDPS-MYDOMAIN \ myprinter.ou.cn.mydomain.de
我想得到这个:
PS-myprinter
“myprinter”的字符数量因打印机而异。
我坚持要从完整的字符串中切割出我需要的部分。
背景:我从novell到microsoft进行了大规模的printserver迁移。为了尽可能少地影响用户,我想再次使用此脚本将新的microsoft部署的打印机设置为默认打印机。希望这是可以理解的。
抱歉我的英语不好。
提前致谢
到目前为止示例代码:
$name = (get-content env:Computername)
Get-WmiObject -Class Win32_Printer -Filter "Default = $true" |
Select-Object - expandProperty Name |
Out-File -filepath C:\"$name"_defaultprinter.txt
Get-Content "C:\"$name"_defaultprinter.txt" |
Foreach-Object {$_.Replace("NDPS","PS")} |
Set-Content "C:\"$name"_defaultprinter.txt"
这是输出:
\\mydomain\NDPS-MJP1-0014-SamsungML3471.A-Printers.MJP1.xx-xxxx.xxxxx-xxxxx.DE
\\mydomain\NDPS-MJP1-0014-SamsungML3471.A-Printers.MJP1.xx-xxxx.xxxxx-xxxxx.DE
输出应该只是PS-MJP1-0014-SamsungML3471
答案 0 :(得分:0)
请尝试使用此脚本:
Get-WmiObject -Class Win32_Printer -Filter "Default = $true" | % {
$_.Name -replace '(?:.*)\\NDPS-([^\.]+)(?:.*)', 'PS-$1'
} | Out-File -FilePath "C:\$($env:COMPUTERNAME)_defaultprinter.txt"
编辑:尝试在一台计算机上运行此功能。将所有输出发布为您的问题的编辑(不在评论中)。如果您需要隐藏一些敏感信息,只需替换单词(留下特殊字符等):
Get-WmiObject -Class Win32_Printer -Filter "Default = $true" | % {
$_.Name
$_.Name -replace '(?:.*)\\NDPS-(?:[^\\]+)\\(.+?)\.(?:.*)', 'PS-$1'
}
我提供的正则表达式与您的一个样本字符串完美配合,因此$_.Name
的实际值似乎与您提供的示例不相等。因此,运行上面的代码并按照我的说法提供输出,以便我们得到正确的样本。