从文本文件中选择字符串的一部分,并使用powershell将其写入另一个字符串

时间:2013-02-25 15:28:44

标签: string powershell cut

我目前正在编写一个脚本,用于读取工作站上的标准打印机并将其写入文本文件。现在我需要转换或剪切输出字符串并将其写入另一个文件,以便将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

1 个答案:

答案 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的实际值似乎与您提供的示例不相等。因此,运行上面的代码并按照我的说法提供输出,以便我们得到正确的样本。