Powershell 删除所有空格以格式化输出
我正在使用powershell,并创建了一个文本文件,该文件将下拉服务器上可用的共享列表 此文本文件包含大量空格,但是我只需要删除文件夹名称中的空格,例如Powershell 删除所有空格以格式化输出,powershell,Powershell,我正在使用powershell,并创建了一个文本文件,该文件将下拉服务器上可用的共享列表 此文本文件包含大量空格,但是我只需要删除文件夹名称中的空格,例如test2$ 理想情况下,我只想删除这个空间,以便它读取Test2$。因为我正在尝试创建一个CSV,以便可以在另一个脚本中使用它 我复制文本文件并将其重命名为csv,然后复制该csv的内容,并使用空格作为分隔符,然后将结果放入列中,然而,当它这样做时,它也会拾取多个空格,从而清除所有空格,留下结果,如下所示 这可能吗 因此,我尝试了以下方法:
test2$
理想情况下,我只想删除这个空间,以便它读取Test2$
。因为我正在尝试创建一个CSV,以便可以在另一个脚本中使用它
我复制文本文件并将其重命名为csv,然后复制该csv的内容,并使用空格作为分隔符,然后将结果放入列中,然而,当它这样做时,它也会拾取多个空格,从而清除所有空格,留下结果,如下所示
这可能吗
因此,我尝试了以下方法:
-replace " ",""
$_.trim() -ne
这两个选项都会删除所有的空格。但我只需要删除一个
我的当前代码
##############################################################
#Varibles
##############################################################
$PCs = gc "C:\Temp\Servers\Pc.txt"
$FSText = "C:\Temp\Servers\FileShares.txt"
$FSText2 = "C:\Temp\Servers\FileShares2.txt"
$FSERRORS = "C:\Temp\Servers\Errors.txt"
$FSCSV = "C:\Temp\Servers\Server_Shares.csv"
$FSCSV2 = "C:\Temp\Servers\Server_Shares2.csv"
#############################################################
#############################################################
Function Shares{
$PCs|Foreach-Object{
Try{
$ErrorActionPreference = 'Stop'
$PC = $_
Get-WmiObject win32_share -ComputerName $_ | Sort-Object -Property path | ft @{Name="Server";Expression={$_.__Server}},path,name
}
Catch
{ "Unable to obtain to access to shares on $PC " | Out-file $FSERRORS
$ErrorActionPreference ='Continue'
}
}
}
#############################################################
Shares | Out-File $FSText
#############################################################
Function Format{
(GC $FSText) -replace "Server", "" -replace "Path","" -replace "Name","" |Set-Content $FSText
(GC $FSText) | ?{$_.trim() -ne ""} |Set-Content $FSText
(GC $FSText) -replace "\s+" , ";" | Out-File $FSText
copy-item $FSText $FSText2
Rename-Item $FSText $FSCSV
Rename-Item $FSText2 $FSText
Import-CSV $FSCSV -Delimiter ';' -header Server,Path,Name| Export-CSV $FSCSV2 -NoClobber -NoTypeInformation -Append
}
#############################################################
Format
#############################################################
------ ---- ----
WKS000001 IPC$
WKS000001 C:\ C$
WKS000001 C:\Temp\Test Test
WKS000001 C:\Temp\Test 2$ Test 2$
WKS000001 C:\WINDOWS ADMIN$
------ ---- ----
WKS000002 IPC$
WKS000002 C:\ C$
WKS000002 C:\Windows ADMIN$
生成文本文件
##############################################################
#Varibles
##############################################################
$PCs = gc "C:\Temp\Servers\Pc.txt"
$FSText = "C:\Temp\Servers\FileShares.txt"
$FSText2 = "C:\Temp\Servers\FileShares2.txt"
$FSERRORS = "C:\Temp\Servers\Errors.txt"
$FSCSV = "C:\Temp\Servers\Server_Shares.csv"
$FSCSV2 = "C:\Temp\Servers\Server_Shares2.csv"
#############################################################
#############################################################
Function Shares{
$PCs|Foreach-Object{
Try{
$ErrorActionPreference = 'Stop'
$PC = $_
Get-WmiObject win32_share -ComputerName $_ | Sort-Object -Property path | ft @{Name="Server";Expression={$_.__Server}},path,name
}
Catch
{ "Unable to obtain to access to shares on $PC " | Out-file $FSERRORS
$ErrorActionPreference ='Continue'
}
}
}
#############################################################
Shares | Out-File $FSText
#############################################################
Function Format{
(GC $FSText) -replace "Server", "" -replace "Path","" -replace "Name","" |Set-Content $FSText
(GC $FSText) | ?{$_.trim() -ne ""} |Set-Content $FSText
(GC $FSText) -replace "\s+" , ";" | Out-File $FSText
copy-item $FSText $FSText2
Rename-Item $FSText $FSCSV
Rename-Item $FSText2 $FSText
Import-CSV $FSCSV -Delimiter ';' -header Server,Path,Name| Export-CSV $FSCSV2 -NoClobber -NoTypeInformation -Append
}
#############################################################
Format
#############################################################
------ ---- ----
WKS000001 IPC$
WKS000001 C:\ C$
WKS000001 C:\Temp\Test Test
WKS000001 C:\Temp\Test 2$ Test 2$
WKS000001 C:\WINDOWS ADMIN$
------ ---- ----
WKS000002 IPC$
WKS000002 C:\ C$
WKS000002 C:\Windows ADMIN$
------ ---- ----
WKS00001 IPC$
WKS00001 C:\C$
WKS00001 C:\Temp\测试
WKS00001 C:\Temp\Test 2$Test 2$
WKS00001 C:\WINDOWS管理员$
------ ---- ----
WKS00002 IPC$
WKS00002 C:\C$
WKS00002 C:\Windows管理员$
结果为csv
Server Path Name
------ ---- ----
WKS000001 IPC$
WKS000001 C:\ C$
WKS000001 C:\Temp\Test Test
WKS000001 C:\Temp\Test 2$
WKS000001 C:\WINDOWS ADMIN$
------ ---- ----
WKS000002 IPC$
WKS000002 C:\ C$
WKS000002 C:\Windows ADMIN$
服务器路径名
------ ---- ----
WKS00001 IPC$
WKS00001 C:\C$
WKS00001 C:\Temp\测试
WKS00001 C:\Temp\Test 2$
WKS00001 C:\WINDOWS管理员$
------ ---- ----
WKS00002 IPC$
WKS00002 C:\C$
WKS00002 C:\Windows管理员$
正如您所见,它将Test 2$的路径分为两列,但是我需要它位于一列中。您已经在列中使用了计算属性。对路径使用相同的方法
Sort-Object -Property path | ft @{Name="Server";Expression={$_.__Server}},@{Name="Path";Expression={$_.Path.replace(" ","")}},Name -autosize
但是您应该知道C:\MyPath
!=<代码>C:\My Path。要使用带空格的路径,请将它们括在“
或”
“C:\My Path”要将路径替换为带引号的路径,可以使用以下代码:
Sort-Object -Property path | ft @{Name="Server";Expression={$_.__Server}},@{Name="Path";Expression={"'$_.Path'"}},Name -autosize
Thx James C.指出使用
.replace()
而不是.trim()
。我忘了.trim()
只适用于字符串开头和结尾的空格,而.replace()只适用于字符串开头和结尾的空格
删除所有空白。您已经在列中使用计算属性。对路径使用相同的方法
Sort-Object -Property path | ft @{Name="Server";Expression={$_.__Server}},@{Name="Path";Expression={$_.Path.replace(" ","")}},Name -autosize
但是您应该知道C:\MyPath
!=C:\MyPath
。要使用带空格的路径,请将它们括在“
或”
><代码>'C:\My Path'要将路径替换为带引号的路径,可以使用以下代码:
Sort-Object -Property path | ft @{Name="Server";Expression={$_.__Server}},@{Name="Path";Expression={"'$_.Path'"}},Name -autosize
Thx James C.指出使用
.replace()
代替.trim()
。我忘记了.trim()
只适用于字符串开头和结尾的空格,而.replace()
删除所有空格。您只需更新计算属性,因此replace仅由Name
属性使用:
Get-WmiObject win32_share -ComputerName $PC |
Select-Object -Property @{Name="Server";Expression={$_.__Server}},Path,@{Name="Name";Expression={$_.Name.replace(" ","")}} |
Format-Table -AutoSize
将为您提供以下输出:
Server Path Name
------ ---- ----
WKS000001 IPC$
WKS000001 C:\ C$
WKS000001 C:\Temp\Test Test
WKS000001 C:\Temp\Test 2$ Test2$
WKS000001 C:\WINDOWS ADMIN$
服务器路径名
------ ---- ----
WKS00001 IPC$
WKS00001 C:\C$
WKS00001 C:\Temp\测试
WKS00001 C:\Temp\Test 2$Test2$
WKS00001 C:\WINDOWS管理员$
您可以只更新计算属性,因此替换仅由
名称属性使用:
Get-WmiObject win32_share -ComputerName $PC |
Select-Object -Property @{Name="Server";Expression={$_.__Server}},Path,@{Name="Name";Expression={$_.Name.replace(" ","")}} |
Format-Table -AutoSize
将为您提供以下输出:
Server Path Name
------ ---- ----
WKS000001 IPC$
WKS000001 C:\ C$
WKS000001 C:\Temp\Test Test
WKS000001 C:\Temp\Test 2$ Test2$
WKS000001 C:\WINDOWS ADMIN$
服务器路径名
------ ---- ----
WKS00001 IPC$
WKS00001 C:\C$
WKS00001 C:\Temp\测试
WKS00001 C:\Temp\Test 2$Test2$
WKS00001 C:\WINDOWS管理员$
解决这个问题的方法是使用以下方法:
-替换“\s\s+”
这将删除文本文件中的所有空格,您可以替换为一个字符并在该字符上划界以创建CSV。此问题的解决方案是使用以下命令:
-替换“\s\s+”
这将删除文本文件中的所有空格,您可以替换为一个字符并在该字符上划界以创建您的CSV。如果使用错误的方法,则在将数据保存到txt文件之前更新数据会更容易。请更新您的问题,以包括您用于创建txt文件的代码,以便我们可以看到您正在执行的操作:)更新的代码以反映所询问的内容如果您以错误的方式处理此问题,则在将数据保存到txt文件之前更新数据会更容易。请更新您的问题,以包括您用于创建txt文件的代码,以便我们可以看到您正在执行的操作:)更新的代码以反映正在询问的内容。我误读了您希望更改名称而不是路径的列。但是方法应该是一样的。感谢T-ME Hjover,结果如下所示;如果可能的话,我想保留原始格式“\\WKS001\root\cimv2:Win32_Share.=”IPC$”。这可能吗?对我来说,它起作用:Get-WmiObject-Win32_Share | Sort Object-Property path | ft@{Name=“Server”表达式={$.\uu_服务器},@{Name=“path”表达式={$.path.replace(“,”)},@{Name=“Name=”Name”表达式=${.Name.Name.replace(“,”,“)}}-autosize
(这是一行)在您将trim()
替换为replace()
后起作用,提到这一点可能有助于OP了解您所做的更改,因为这并不明显。Ups我误读了您想要更改名称而不是路径的列。但是方法应该是一样的。感谢T-ME Hjover,结果如下所示;如果可能的话,我想保留原始格式“\\WKS001\root\cimv2:Win32_Share.=“IPC$”。这可能吗?对我来说,它起作用:Get WmiObject Win32_Share | Sort Object-Property path | ft@{Name=“Server”表达式={$.\uu服务器