Удаление всех пробелов для форматирования вывода - PullRequest
0 голосов
/ 16 января 2019

Я использую PowerShell и создал текстовый файл, который раскрывает список общих ресурсов, доступных на сервере.

Этот текстовый файл содержит многочисленные пробелы, однако мне нужно удалить только те, которые указаны в имени папки, например Test 2$.

В идеале я хочу просто удалить это место, чтобы оно читалось как 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$

Результаты в 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$

Как видите, путь теста 2 $ разбивается на два столбца, однако мне нужно, чтобы он был в одном.

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Вы можете просто обновить свои рассчитанные свойства, поэтому замена используется только 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$
0 голосов
/ 18 января 2019

Решение вопроса заключается в следующем:

-замена '\ s \ s +'

Это удаляет все пробелы из текстового файла, и вы можете заменить его символом и разделить его тем же символом, чтобы создать CSV.

0 голосов
/ 16 января 2019

Вы уже используете вычисляемое свойство в столбцах. Используйте тот же путь для Пути.

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

Спасибо Джеймсу С. за указание на использование .replace() вместо .trim(). Я забыл, что .trim() работает только с пробелами в начале и конце строки, тогда как .replace() удаляет все пробелы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...