ファイルサーバーでの使用をより簡単にしようとしています。私はshares.txt
と呼ばれるファイルをインポートしたいと思います。その中にはshares.txt
があります。フォルダ名→ルートフォルダと共有名→サブフォルダ。テキストファイルから共有リストのNTFSアクセス許可を読み取る方法
\\10.10.15.240\folder name\share name
\\10.10.15.240\folder name\share2 name
\\10.10.15.240\folder name\share3 name
\\10.10.15.240\folder2 name\share name
\\10.10.15.240\folder2 name\share2 name
\\10.10.15.240\folder2 name\share3 name
などとなる。
そして、私はへの出力を作成したいと思います:フォルダ名を使用して\\10.10.15.240\output\
上のテキストファイルに 出力データを、ファイル名の一部として
\\10.10.15.240\output\Company_name_$folder name_$share name.csv
\\10.10.15.240\output\Company_name_$folder name_$share2 name.csv
\\10.10.15.240\output\Company_name_$folder name_$share3 name.csv
\\10.10.15.240\output\Company_name_$folder2 name_$share name.csv
\\10.10.15.240\output\Company_name_$folder2 name_$share2 name.csv
\\10.10.15.240\output\Company_name_$folder2 name_$share3 name.csv
を名前を共有し続けます。
スクリプトでこれをインポートする方法は分かりますか?私はいくつかのことを試しましたが、それらはすべてエラーを伴います。
スクリプト:
は、私が代わりにExcelに直接それを書くのCSVファイルへのアクセス権リストを書きたいです。
$ErrorActionPreference = "SilentlyContinue"
$a = New-Object -ComObject Excel.Application
$a.visible = $true
$b = $a.Workbooks.Add()
$intRow = 1
$c = $b.Worksheets.Item(1)
$c.Cells.Item($intRow,1) = "Folder"
$c.Cells.Item($intRow,2) = "Compte/groupe"
$c.Cells.Item($intRow,3) = "Type d'Acces"
$c.Cells.Item($intRow,4) = "Droits"
$d = $c.UsedRange
$d.EntireColumn.AutoFit()|Out-Null
$d.Interior.ColorIndex = 19
$d.Font.ColorIndex = 11
$d.Font.Bold = $true
Remove-Variable arrayOfPath
$depth = 2
$RootFolder = "\\MySRV\Folder"
for ($i=0; $i -le $depth; $i++) {
$arrayOfPath += ,$RootFolder
$RootFolder = $RootFolder + "\*"
}
$arrayOfPath | Get-ChildItem | %{
Get-Acl $_.FullName
} | %{
$intRow = $intRow + 1
$c.Cells.Item($intRow, 1) = $_.Path.ToString().Replace("Microsoft.PowerShell.Core\FileSystem::", "")
$droit = $_.Access
$droit | %{
$c.Cells.Item($intRow, 2) = $_.IdentityReference.ToString();
$c.Cells.Item($intRow, 3) = $_.AccessControlType.ToString();
$c.Cells.Item($intRow, 4) = $_.FileSystemRights.ToString();
$intRow = $intRow+1
}
}
$d.EntireColumn.AutoFit() | Out-Null
最終更新日:
$arrayOfPaths= Get-Content "\\UNC PATH\myfile.txt"
Get-ChildItem $arrayOfPaths -Recurse | Where-Object {$_.mode -match "d"} | ForEach-Object {
$csv = $_.FullName -replace '^\\\\[^\\]+\\([^\\]+)\\(.*)', '\\UNC PATH\Company_name_${1}_${2}.csv' # <- construct CSV path here
$path = $_.FullName
Get-Acl $path | Select-Object -Expand Access |
Select-Object @{n='Path';e={$path}}, IdentityReference, AccessControlType,
FileSystemRights |
Export-Csv $csv -Append -NoType
}
ありがとうございました。私の質問は、どのようにファイル名をソースパスの要素に依存させることができますか?私はそれが正規表現を必要と仮定2 - Get-Content経由で特定のTXTファイル内のすべてのフォルダのUNCパスを取得し、配列のエントリとしてそれぞれを返しますか?私はそれを理解することはできません。 – Arbelac
正規表現は通常の方法です。または、パス文字列を分割することもできます。 'Get-Content'はすでに配列を返すので、変数に代入するか、直接Get-ChildItemにパイプすることができます。 –
上記の最終更新コードは正しいですか?私のコードとあなたのコードをどのように組み合わせることができますか? Excelの使用をCOMオブジェクトとして完全に削除する必要がありますか?また、私が前に言ったように、正規表現や分割パス文字列をどうやって使うのですか? – Arbelac