質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

解決済

ディレクトリのアクセス権限を取得、インポートするスクリプトについて

spline
spline

総合スコア1

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

2回答

0評価

0クリップ

553閲覧

投稿2022/01/07 07:45

編集2022/01/07 07:46

前提・実現したいこと

PowerShell初心者です。
初めての質問であり、質問内のわかりづらい部分等、拙い記載がありましたら申し訳ございません。
PowerShellにて、ディレクトリのアクセス権限を取得するスクリプトおよび、取得したデータをインポートするシェルを作成中です。
具体的には正サーバからアクセス権限をcsvに出力し、災対用サーバにて、csvからデータを読み取り、
正サーバと同様の設定を行いたいと考えております。

疑問点

・csvからデータを読み取る為の書き方が理解できていません。
・csvに出力する際にキーに対して値が複数ある際に、キー,値,値となってしまいます。
実現したい出力は
キー,値
キー,値 となりますが、出力方法が分かりません。

該当のソースコード

■アクセス権出力用(dir-csv.ps1)
$target = "c:\temp"
foreach (FolderList in Get-ChildItem | where-object { $_.PSIsContainer })
{
$shareacl = (Get-ACL $FolderList).Access | Select IdentityReference | Select-String -Pattern 'domainname' | Select-String -Pattern 'user[0-9][0-9][0-9]'
Write-Host "FolderList","shareacl"
}

■csv出力用
$outfile = "c:\userlist.csv"

Powershell -NoProfile -File ".\dir-csv.ps1" > $outfile

#######出力後成型
$data = Get-Content $outfile | Foreach-Object { $_ -replace "{IdentityReference=","" }
$data | Out-File $outfile
$data = Get-Content $outfile | Foreach-Object { $_ -replace "}","" }
$data | Out-File $outfile
$data = Get-Content $outfile | Foreach-Object { $_ -replace " ","," }
$data | Out-File $outfile

試したこと

・csvからデータを読み取る方法
ヘッダーを付ける

$outfile = "c:\userlist.csv"
$target = "c:\temp"

$csv_content = Get-Content -Path "$outfile" -Encoding String
$csv_content = $csv_content | ConvertFromCsv -Header "dir","user1","user2"...

補足情報

具体的に実現したいことは以下です。

■csvを下記のようにしたい
test1,user001
test2,user001,user002

test1,user001
test2,user001
test2,user002

■csvからディレクトリ名、ユーザ名を抽出しアクセス権限をループして与える
$target = "c:\temp"

cd $target
$User_or_Group_name = 'ここにcsvから抽出したユーザ名を入れたい'
$Folder_Path = "ここにvsvから抽出したディレクトリ名を入れたい($target+抽出したディレクトリ名)"
$acl = Get-ACL $FolderPath
$Permission = ("$User_or_Group_name","FullControl","ContainerInherit","None","Allow")
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $Permission
$acl.SetAccessRule($AccessRule)
$acl | Set-ACL $FolderPath

上記をループさせたい。

以上となります。よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。