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

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

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

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

Q&A

解決済

1回答

12773閲覧

PowerShellでエラーが改善した理由を教えてほしい。

sabakan11

総合スコア7

PowerShell

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

0グッド

0クリップ

投稿2016/08/28 03:09

PowerShellでフォルダのアクセス権を取得しcsvに出力するコードを書きました。
以下のコード1でエラーのため上手く実行できず、コード2のようにコード1の内容から1行だけ追記して実行したところ、偶然エラーなく実行できました。
※追記した行はコード2のコメント参照

しかし、なぜエラーが出ていたのか、コード2ではなぜうまく実行出来たのか、
わからないのでご教授ください。

###コード1

Powershell

1#.NETオブジェクト[System.Collections.ArrayList]作成 2$array = New-Object System.Collections.ArrayList 3 4#対象フォルダを配列へ 5[array]$Folders = "test1","test2","test3" 6 7#CSV保存先 8$CsvSavePath = "C:\AclResult\acl.csv" 9 10#配列処理 11 foreach($Folder in $Folders){ 12 $FolderPath = "C:\AclTest\" + $Folder 13 $ACLs = Get-Acl -Path $FolderPath 14 15 foreach( $ACL in $ACLs.access ){ 16 $array.add( 17 $ACL.IdentityReference + "," + ` 18 $ACL.FileSystemRights + "," + ` 19 $ACL.AccessControlType + "," + ` 20 $ACL.IsInherited + "," + ` 21 $ACL.InheritanceFlags + "," + ` 22 $ACL.AreAccessRulesProtected ` 23 ) 24 } 25 } 26#ソート処理 27$array.Sort() 28 29#1行目に下記項目を代入 30$array.insert(0,"Path,` 31 IdentityReference,` 32 FileSystemRights,` 33 AccessControlType,` 34 IsInherited,` 35 InheritanceFlags,` 36 AreAccessRulesProtected"` 37 ) 38#結果をcsvへ保存 39$array > $CsvSavePath 40 41 42 43

###発生している問題・エラーメッセージ

[System.Security.Principal.NTAccount] に 'op_Addition' という名前のメソッドが含まれないため、メソッドの呼び出しに失敗しました。 発生場所 行:16 文字:12 + $array.add( + ~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (op_Addition:String) []、RuntimeException + FullyQualifiedErrorId : MethodNotFound

###コード2

#.NETオブジェクト[System.Collections.ArrayList]作成 $array = New-Object System.Collections.ArrayList #対象フォルダを配列へ [array]$Folders = "test1","test2","test3" #CSV保存先 $CsvSavePath = "C:\AclResult\acl.csv" #配列処理 foreach($Folder in $Folders){ $FolderPath = "C:\AclTest\" + $Folder $ACLs = Get-Acl -Path $FolderPath foreach( $ACL in $ACLs.access ){ $array.add( ##############追記したコード「$Folder +"," + `」########### $Folder +"," + ` $ACL.IdentityReference + "," + ` $ACL.FileSystemRights + "," + ` $ACL.AccessControlType + "," + ` $ACL.IsInherited + "," + ` $ACL.InheritanceFlags + "," + ` $ACL.AreAccessRulesProtected ` ) } } #ソート処理 $array.Sort() #1行目に下記項目を代入 $array.insert(0,"Path,` IdentityReference,` FileSystemRights,` AccessControlType,` IsInherited,` InheritanceFlags,` AreAccessRulesProtected"` ) #結果をcsvへ保存 $array > $CsvSavePath

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

予想になりますけど、

$ACL.IdentityReferenceオブジェクトのクラスには + 演算子で何かと結合する機能はないけれど

$Folder + "," + $ACL.IdentityReference となったことで、この式は文字列の結合となったので、$ACL.IdentityReference.ToString() と暗黙に文字列化されたのでエラーではなくなったのでは。

投稿2016/08/28 03:27

flied_onion

総合スコア2604

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sabakan11

2016/08/28 04:36

回答ありがとうございます。 回答を参考にコード1を全て$ACL.~.ToString()の形にすればうまく実行できるのではと思いましたが、null関係のエラーで実行出来ませんでした。 上記オブジェクトクラスの機能やNULLのエラーなどについて調べてみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問