1

我希望有人能帮帮忙。我正在尝试操作由 powershell 创建的文件。我设法得到了我想要的最终结果,但我相信如果它只有一个命令会更容易。

# Invoke the Exchange Snapping ( make sure you are Exchange Admin to do it SO)
add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010

#Create a file with list of DL in the organization
Get-DistributionGroup | Select-Object Name | Out-File C:\Pre_DLGroups.txt
$content = Get-Content C:\Pre_DLGroups.txt

#Remove the 3 first lines of the file that you dont need it
$content | Select-Object -Skip 3 | Out-file C:\DLGroups.txt

#Trim the space in the end and crate the Final file
Get-Content C:\DLGroups.txt | Foreach {$_.TrimEnd()} | Set-Content c:\FinalDLGroup.txt

是那种使最终结果成为单个文件而不是创建 3 个文件的方法吗?干杯

埃尔顿

4

2 回答 2

1

您可以通过管道发送您的内容,而无需将其写入文件。您可以使用括号对某些 cmdlet 和/或函数集的输出进行分组,然后将该输出通过管道传递到预期的 cmdlet。

这都可以在一行上应用,但出于格式原因,我在这里将它写在多行上。添加Out-String是一种安全措施,以确保您打算修剪的任何输出实际上都可以被修剪。

由于我们不再从文本文件中获取此内容,powershell 可能会返回一个不理解的对象TrimEnd(),因此我们需要为此做好准备。

(Get-DistributionGroup | Select-Object Name) | 
Out-String | 
Select-Object -Skip 3 |
Foreach {$_.TrimEnd()} | 
Set-Content c:\FinalDLGroup.txt

然而,一个更小的解决方案将涉及仅提取每个名称并直接操作它。我在%这里用作Foreach-Object. 此示例使用Get-ChildItem,我在当前目录中有一些名为 test 的文件:

(Get-ChildItem test*) | 
% { $_.Name.TrimEnd() } | 
Set-Content c:\output.txt
于 2013-09-03T17:13:46.983 回答
0
Get-DistributionGroup | 
Select-Object -ExpandProperty Name -Skip 3 |
Set-Content c:\FinalDLGroup.txt
于 2013-09-04T08:42:02.013 回答