#powershell #file-extension #shared-directory
#powershell #расширение файла #общий каталог
Вопрос:
Я новичок в написании сценариев PS (на самом деле, я начал сегодня), и для проекта мне нужно создать текстовый файл со всеми расширениями из всех общих папок на локальном компьютере (файловый сервер Windows).
Я думаю, что я на правильном пути с этим :
get-childitem -Path C:test -Recurse | select extension -unique > $PSScriptRootExtensionList.txt
Это делает именно то, что я хочу для заданного пути и всех вложенных папок, но теперь мне нужно применить это ко всем общим папкам на компьютере.
Я смог указать весь путь к общей папке с помощью этой команды :
$Shares= @(Get-WmiObject Win32_Share |
Select Name,Path,Type |
Where-Object { $_.Type -match '0|2147483648' } |
Select -ExpandProperty Path |
Select -Unique)
Write-Host $Shares
Теперь я застрял, я полагаю, мне нужно использовать команду foreach, но я не могу найти способ заставить ее работать.
Кто-нибудь может помочь мне собрать это воедино?
Спасибо,
Ответ №1:
Вы можете попробовать Get-SMBShare
командлет:
Get-SMBShare | Foreach {
Get-ChildItem "\$($_.name)" | Select-Object Extension -Unique
}
Ответ №2:
Вероятно, вы ищете что-то похожее на это:
$Shares = @( Get-CimInstance Win32_Share | Where-Object { $_.Type -match '0|2147483648' } | Select -Unique )
ForEach ( $Share In $Shares ) { Get-ChildItem -Path $Share.Path -File -Recurse -ErrorAction Ignore | Select -Unique -ExpandProperty Extension }
Я оставлю вас разбивать строки в соответствии с вашим конкретным стилем и выводить в файл (я бы посоветовал вам использовать для этого Out-File
вместо >
).
Ответ №3:
Спасибо вам, ребята, за вашу помощь! Я смог с этим разобраться.
Следующий скрипт соберет все расширения в общих папках, отсортирует их, удалит дубликаты и пустые строки, добавит «*» перед расширением и создаст файл list.txt с результатом.
#get shares
$Shares = @( Get-CimInstance Win32_Share |
Where-Object { $_.Type -match '0|2147483648' } |
Select -Unique )
#list all extensions
ForEach ( $Share In $Shares ) { Get-ChildItem -Path $Share.Path -File -Recurse -ErrorAction Ignore | Select -Unique -ExpandProperty Extension | out-file C:extensionsList1.txt -append }
#remove empty lines
@(gc C:extensionsList1.txt) -match 'S' | out-file C:extensionsList2.txt
#Add * before extention type
gc C:extensionsList2.txt | %{"*$_"} | out-file C:extensionsList3.txt
#Sort by name
gc C:extensionsList3.txt | sort | get-unique > C:extensionsList4.txt
#Remove duplicates
$hash = @{}
gc C:extensionsList4.txt |
%{if($hash.$_ -eq $null) { $_ }; $hash.$_ = 1} > C:extensionsList.txt
#Delete list1-4
Remove-Item C:extensionsList1.txt, C:extensionsList2.txt, C:extensionsList3.txt, C:extensionsList4.txt