Сначала немного предыстории: меня попросили в составе команды Scrum на работе подготовить сценарий Powershell, который сопоставит список общих ресурсов SMB, помеченных как безопасные для архивирования из файлов CSV, которые были данные мне вложены в структуру папок (каждый общий ресурс равен одному CSV-файлу со списком файлов внутри, но единственное значение для этого - это то, что они называются SHARENAME.csv), и текущие разрешения для каждого, если они необходимо восстановить позже.
На данный момент у меня есть следующее для первого шага (легко и просто):
get-childitem -path 'C:\users\adam.lane\desktop\_with adam\_remove' | select BaseName | export-csv -path "..\test.csv"
Это дает мне один файл CSV с имена всех 188 акций в одном столбце. Второй шаг, экспорт CSV-файла для каждого со списком разрешений, также не выполняется. Пока у меня есть следующее:
$share = Import-Csv -path 'C:\users\adam.lane\desktop\_with adam\test.csv' -Header 'BaseName'
ForEach ($share in $share) {
get-smbshareaccess -name $share -cimsession euukpopdfs005
}
Очевидно, что в данный момент там нет команды export-csv, но по сути я хочу, чтобы скрипт использовал то же имя общего ресурса, которое он вызывает с помощью get- smbshareaccess -name 'в качестве имени файла для файла CSV. К сожалению, в этот момент я обнаружил 188 ошибок в следующем формате:
get-smbshareaccess : euukpopdfs005: No MSFT_SMBShare objects found with property 'Name' equal to '@{BaseName=Brand}'. Verify the value of the property and retry.
At line:3 char:1
+ get-smbshareaccess -name $share -cimsession euukpopdfs005
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (@{BaseName=Brand}:String) [Get-SmbShareAccess], CimJobException
+ FullyQualifiedErrorId : CmdletizationQuery_NotFound_Name,Get-SmbShareAccess
+ PSComputerName : euukpopdfs005
Поэтому вместо вызова BaseName (например, «Brand» в этом первом случае) он вызывает (@ {BaseName = Brand}: Строка), для которой он ничего не находит.
Могу ли я привести это в порядок? В идеале, в некотором роде, это будет работать как для команды Get-SmbShareAccess, так и для команды export-csv, но я не против делать немного больше поигрований по мере необходимости.
Это мой первый пост, поэтому я извинитесь, если это слишком долго, не хватает подробностей, et c et c. Дай мне знать если тебе нужно что-нибудь еще! Заранее спасибо.
Окончательный (рабочий) код после предложений:
get-childitem -path 'C:\users\adam.lane\desktop\_with adam\_remove' | select BaseName | export-csv -path "..\test.csv"
$share = Import-Csv -path 'C:\users\adam.lane\desktop\_with adam\test.csv' -Header 'BaseName'
$share | Format-List
ForEach ($item in $share) {
get-smbshareaccess -name $item.BaseName -cimsession euukpopdfs005
}