システム管理者は毎日、Windows サーバーでファイルやフォルダーの作成、削除、移動など、さまざまな標準的な操作を行っています。このブログ記事で提供されているコアとなる一連の Active Directory (AD) の PowerShell コマンドを使いこなせるようになると、PowerShell でファイルを作成するために必要な手作業を大幅に減らせます。
始める前に、「Windows PowerShell Scripting Tutorial for Beginners」で説明されているとおり、システム ポリシーで PowerShell スクリプトの実行が許可されていることを確認してください。以下の記事では、ファイルを作成し、削除し、コピーし、内容を追加するための PowerShell コマンドを学びます。
New-Item Cmdlet による基本的なファイル作成
PowerShell の cmdlet New-Item を使って、ディレクトリ、ファイル、またはレジストリ キーなどのオブジェクトを作成します。-Path パラメーターは、新しい項目を作成する場所を指定し、 -ItemType パラメーターは、作成する項目の種類を指定します。たとえば -Name および -Value を使うことで、新しい項目の名前と内容を指定できます。では、PowerShell でファイルを作成する方法を見ていきましょう。
ステップバイステップ ガイド:空の ファイルとフォルダーの作成
フォルダーを作成
New-Item -Path “c:\NewFolderExample” -ItemType Directory
以下は、PowerShell のファイル作成コマンドを使った例です:
ファイルを作成する
次に、以下のとおり PowerShell でファイルを作成する方法を説明します。
New-Item -Path ”c:\NewFolderExample\newfile.txt” -ItemType File
パラメーターの説明
New-Item cmdlet のコード要素を見てみましょう:
- -Path:このパラメーターは、新しいファイルが作成される場所を指定します。上の例では、ファイルは新しく作成したフォルダー内に作成されました。このパスは、ファイルを作成したい任意のディレクトリに変更できます。
- -ItemType: このパラメーターは、作成する項目の種類を定義します。上記の例では、Directory と File を指定しました。
PowerShell では、項目パス(item path)とは、ファイル システム内、または他のプロバイダー 名前空間内における項目(ファイルやディレクトリなど)の場所を指します。上記の例では、すべての要素(provider、drive、containers、item name)を含む完全修飾項目パス(fully qualified item path)を使用しました。相対パス(relative paths)も利用できます。相対パスでは、先頭のバックスラッシュはドライブのルートを参照しません。代わりに、フォルダー名の一部として扱われます。実際の場所は、PowerShell での現在の作業ディレクトリによって決まります。以下では、相対ファイル パスを使って PowerShell でテキスト ファイルを作成する方法を示します:
New-Item -Path '\NewExampleFolder\newfile.txt' -ItemType File
例
別のディレクトリにファイルを作成する
PowerShell では -Path パラメーターを変更することで、さまざまなディレクトリ内にファイルを作成できます。たとえば:
New-Item -Path "c:\projects\myfile.txt" -ItemType File
この create file PowerShell コマンドは、D:\projects ディレクトリに myfile.txt という名前の空のファイルを作成します。
特定の拡張子を持つファイルの作成
create file Windows PowerShell コマンドを使用すると、特定の拡張子を持つファイルを生成できます。たとえば:
New-Item -Path "c:\NewFolderExample\mydocument.docx" -ItemType File
このコマンドは、c:\NewFolderExample ディレクトリに mydocument.docx という名前の空のファイルを作成します。作成したいファイルの種類に応じて、.docx、.txt、.csv など、任意のファイル拡張子を指定できます。
ファイルにコンテンツを追加する
Using Set Content の使用
PowerShell の Set Content cmdlet は、ファイルの内容を書き込む、または置き換えるために使用されます。この cmdlet は、特定の内容を使用してファイル内のテキストを作成または上書きするときに便利です。コマンド Set-Content は、ファイルに単純なテキストを書き込むのに最適で、事前に定義された内容を使って設定ファイルやログを生成する自動化スクリプトと組み合わせて使用できます。追記せずにファイルの内容を直接置き換えます。 powershell create file with content.
Set-Content -Path "c:\NewFolderExample\greetings.txt" -Value "Hello, World!"
Using Out-File の使用
次の例のように、Out-File の cmdlet を使ってファイルを作成し、データを書き込むこともできます:
Get-Process -Name * | Out-File -FilePath c:\ NewFolderExample \processes.txt
別の方法として、たとえば Get -ADuser の出力を Export-Csv にパイプすることで、Excel で開けるファイルを作成できます:
Get-ADuser -Filter * | Export-Csv -Path c:\dataADusers.csv
Out-File は、Get-Process などのコマンドの出力をキャプチャしてファイルに保存するために、よく使われます。ログ出力やレポート作成の目的に役立ちます。 Out-File は、Set-Content cmdlet よりも、大量の出力を扱うのに適しています。まずメモリに読み込むのではなく、データをファイルへストリーミングするためです。Set-Content とは異なり、Out-File は既存のファイルに対して -Append オプションで追記(append)できます。
ディレクトリ内のオブジェクトを表示する
Windows のファイルサーバー上で、すべてのファイルとサブディレクトリを含むディレクトリの内容を表示するには、Get-ChildItem cmdlet を使用します。出力には各アイテムの名前、サイズ、最終更新日時が含まれます。これは Windows の dir または ls コマンドに似ています。
Get-ChildItem -Path C:\NewFolderExample\
隠しオブジェクトを表示する
以下のコマンドは、隠しオブジェクトを含むすべてのルート オブジェクトを NewFolderExample フォルダー内で表示します:
Get-ChildItem -Path "c:\NewFolderExample -Force
すべてのサブフォルダーとその内容を表示
次のコマンドでは、出力を拡張してすべてのサブフォルダーとその内容を含めるために -Recurse パラメーターを使用します。各サブフォルダーは個別に表示されます。たとえば:
Get-ChildItem -Force \ NewFolderExample -Recurse
以下の例は、NewFolderExample の中にある 2 つ目のフォルダーの内容を示しています。
出力をフィルターする
次の -Filter、-Exclude、-Include および -Path パラメーターを使って出力をフィルターできます。
高度なオブジェクトのフィルタリングには、パイプ演算子 (|) を使用して、データを Get ChildItem cmdlet から Where-Object cmdlet に渡します。たとえば、下のスクリプトは fsShared フォルダーおよびサブフォルダー内で、2024 年 7 月 18 日以降に変更されたすべての実行可能ファイルを検索します。
Get-ChildItem -Path C:\NewFolderExample -Recurse -Include *.csv | Where-Object -FilterScript {($_.LastWriteTime -gt '20
高度なファイル作成テクニック
複数のファイルを作成する
PowerShell で複数のファイルを効率よく作成するには、ループを使用します。この方法は、同じような名前のファイルを作成するときや、異なるディレクトリに作成するときに役立ちます。
ループを使って複数のファイルを作成する
複数のファイルを作成するためにループを使用する例は次のとおりです:
1..5 | ForEach-Object {
New-Item -Path "C:\ C:\NewFolderExample\file$_.txt" -ItemType File
}
パラメーターの説明:
- 1..5: これは 1 から 5 までの数値の範囲を作成します。
- ForEach-Object: この cmdlet は、範囲内の各数値を順番に処理します。
- New-Item: この cmdlet は、ループ内の各反復ごとに新しいファイルを作成します。
- -Path “C:\temp\file$_.txt”:各ファイルが作成されるパスです。$_ は、反復(iteration)中の現在の番号を表します。
このスクリプトは、以下のとおり file1.txt、file2.txt、file3.txt などの名前で5つのファイルを作成します。
ループを使うことで、複数のプロジェクト ディレクトリにテンプレート ファイルを作成したり、さまざまなアプリケーション ディレクトリでログ ファイルを初期化したり、既定の構成ファイルを複数のユーザー ディレクトリに配布したりといったことができます。
ワイルドカードの使用
PowerShell ではワイルドカードを使って、複数のファイルまたはディレクトリに対して同時に操作を実行できます。ワイルドカードは New-Item cmdlet と組み合わせて使用すると、1つのコマンドで複数のディレクトリにまたがるファイルを作成できます。
New-Item -Path " C:\NewFolderExample\*\example.txt" -ItemType File
パラメーターの説明:
- このコマンドは、C:\temp の直下にあるすべてのサブディレクトリに、example.txt という名前のファイルを作成しようとします。
- パス中の * はワイルドカードとして機能し、任意のディレクトリ名に一致します。
- PowerShell は C:\temp 内のすべてのサブディレクトリを順番に処理し、それぞれの中に example.txt を作成します。
- サブディレクトリ内にすでに example.txt が存在する場合、-Force パラメーターを追加しない限り上書きされません。
ファイルとフォルダーを削除する
これまで、ファイルの作成に注目してきましたが、PowerShell を使ってファイルを削除することもできます。Remove-Item PowerShell cmdlet を使用して、ファイル、ディレクトリ、またはその他のオブジェクトを削除します。たとえば、次のコマンドは指定したフォルダーと、そのすべてのサブフォルダーおよびファイルを削除します。フォルダーが空でないため、操作の確認を求めるプロンプトが表示される点に注意してください:
Remove-Item -Path '\NewFolderExample’
フォルダー内のすべてのオブジェクトを削除すべきだとすでに確認している場合は、 -Recurse スイッチを使って確認ステップをスキップできます:
Remove-Item -Path '\NewFolderExample' -Recurse
ファイルを削除する
次のコマンドは、フォルダー NewFolderExample から newfile.txt というファイルを削除します:
Remove-Item -Path “C:\NewFolderExample\newfile.txt”
xx 日より前のファイルを削除
ディレクトリ内の古いファイルを整理するには、次のようなスクリプトを使用します。
Get-ChildItem -Path "C:\ NewFolderExample " -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))} | Remove-Item
空のフォルダーを削除
次のスクリプトは空のフォルダーを特定し、確認のプロンプトなしで削除します:
$Folder = "C:\ NewFolderExample "
#Delete empty folders and subfolders
Get-ChildItem $Folder -Recurse -Force -ea 0 |
? {$_.PsIsContainer -eq $True} |
? {$_.getfiles().count -eq 0} |
ForEach-Object {
$_ | del -Force -Recurse
$_.FullName | Out-File C:\deletedfolders.txt -Append
}
存在を確認してからファイルを削除
以下は、datalog.txt というファイルが存在するかどうかを確認し、存在する場合は削除する方法です:
$FileName = 'C:\datalog.txt'
If (Test-Path $FileName){
Remove-Item $FileName
}
Netwrix Change Tracker でファイル管理のアクティビティを監視
ファイルへの上書きと追記
先ほど、ファイルを書き込んだり置き換えたりするために Set-Content コマンドレットを使う方法を説明しました。同じことを行う他の方法は以下のとおりです。
-Force パラメーターの使用
既存のコンテンツを上書きするための、もう1つの PowerShell の create file コマンドのパラメーターは次のとおりです:
New-Item -Path "C:\NewFolderExample\example.txt" -ItemType File -Force
PowerShell の -Force パラメーターは、読み取り専用属性や同名のアイテムが存在するなど、変更を妨げる制限を上書きするために使用します。このコマンドは "example.txt" の末尾に "Additional line" を追加します。ファイルが存在しない場合は、それを作成します。
コマンドを実行する前に、下記の example.txt ファイルのサイズを確認してください:
次に、Windows PowerShell の create file cmdlet に -Force パラメーターを使用すると、以前の内容がどのように消去されるかを確認してください。
パラメーターの説明:
- 「example.txt」がすでに存在する場合、このコマンドは確認せずに上書きします。
- ファイルが読み取り専用の場合、-Force はこの属性を上書きしてファイルを置き換えます。
- 既存の内容にかかわらず、毎回新しいファイルが作成されるようにしたいスクリプトで便利です
コンテンツの追加
既存のファイルにデータを追記するか、存在しない場合は新しいファイルを作成するには、Add-Content コマンドレットを使用できます。たとえば:
Add-Content -Path "C:\temp\example.txt" -Value "Additional line"
このコマンドは「example.txt」の末尾に「Additional line」を追加します。ファイルが存在しない場合は作成します。
Set-Content および Out-File との比較:
主な違い:
- Add-Content は追記(appending)のためで、Set-Content は置換(replacing)のためで、Out-File は柔軟な出力のリダイレクトのためです。
- Add-Content は内容を保持して追記し、Set-Content は置換し、Out-File はどちらも可能です。
特殊なファイル形式の作成
CSVファイル
CSV(Comma-Separated Values)ファイルは、表形式データの保存に広く使用されています。PowerShell Export-CSV cmdlet を使うと、CSV ファイルの作成や操作ができます。オブジェクトを、カンマ区切りの値(CSV)文字列の一連に変換し、下に示すように CSV ファイルとして保存します:
$data | Export-CSV -Path "C:\ NewFolderExample\data.csv" -NoTypeInformation
以下の例では、$data はエクスポートしたいオブジェクトを含む変数です:
パラメーターの説明:
- -NoTypeInformation:CSV ファイルから情報の型を省略します。これにより、多くの場合 PowerShell 固有の型データを含まない、よりすっきりした CSV ファイルになります。
- Export-CSV:この cmdlet は、オブジェクトを CSV 形式に変換します。
JSON ファイル
JSON(JavaScript Object Notation)ファイルは、データを構造化され、読みやすい形式で保存するテキストファイルです。PowerShell では、JSON ファイルは設定データ、アプリケーションの設定、またはキーと値のペアとして表されるその他のデータを保存するために、よく使用されます。
ConvertTo-Json と Out-File を組み合わせることで、PowerShell のオブジェクトを JSON 形式に変換し、ファイルに保存できます。
$data | ConvertTo-Json | Out-File -FilePath "C:\NewFolderExample\data.json"
PowerShell で JSON ファイルを使う用途としては、Web アプリケーションで使用するために PowerShell スクリプトから構成データをエクスポートすること、PowerShell ベースのアプリケーション用の設定ファイルを作成すること、または RESTful API に送信するデータを準備したり API レスポンスを保存したりすることなどがあります。
初心者向け Windows PowerShell スクリプト入門
もっと見る既存ファイルの取り扱い
PowerShell でファイルを扱うときは、想定されるエラーを防ぐために、操作を行う前にそのファイルが存在するかどうかを確認したい場合があります。
ファイルが存在するかを確認
The Test-Path cmdletは、ファイルまたはディレクトリの存在を確認するために一般的に使用されます。ファイル名が datalog.txt のものが存在するかどうかを確認し、存在する場合は削除する方法は次のとおりです:
$FileName = 'C:\datalog.txt'
If (Test-Path $FileName){
Remove-Item $FileName
}
パラメータの説明:
- Test-Path -Path “C:\temp\example.txt”:ファイルが存在するかどうかを確認します。
- -not:結果を否定するため、ファイルが存在しない場合に条件が適切になります。
- ファイルが存在しない場合は、New-Item がそれを作成します。
下の例では、‘NewFolderExample’ ディレクトリが存在する場合にのみ newfile.txt が作成されます
If (Test-Path -Path "C:\NewFolderExample") {
New-Item -Path "'C:\NewFolderExample \newfile.txt" -ItemType File
} else {
Write-Warning "Directory C:\ ''C:\NewFolderExample does not exist"
}
適切なユースケースとしては、既存のカスタマイズ済み設定を上書きしないように、存在しない場合に限ってデフォルトの設定ファイルを作成することが挙げられます。
ファイルとフォルダーのコピーと操作
ファイルとフォルダーをコピーする
ファイルやディレクトリなどの項目を、ある場所から別の場所へコピーしたい場合は、Copy-Item の PowerShell cmdlet を使用します。これは、Windows コマンド プロンプトでcopy コマンドを発行するのと似ています。
同じコンピューター上の2つのフォルダー間でファイルをコピーするには、このコマンドを使用します。
Copy-Item -Path '\Shared\ITUsers.txt' -Destination '\Backup'
特定の種類のファイルのみをコピーする
-Filter parameterを使用すると、ソースから宛先へ特定のファイルのみをコピーできます。たとえば、次のコマンドはあるフォルダーから別のフォルダーへテキストファイルだけをコピーします。
Copy-Item -Filter *.txt -Path \Shared\* -Recurse -Destination \Backup
ファイルまたはフォルダーの名前を変更する
Rename-Item コマンドレットを使用すると、ファイルやディレクトリなどのオブジェクトの名前を、内容をそのままにして変更できます。これは Windows コマンド ren に似ています。
-Path パラメーターはファイルまたはディレクトリの場所を指定し、–NewName パラメーターはファイルまたはフォルダーの新しい名前を指定します。
たとえば、次の PowerShell create text file コマンドは、下線文字を追加した類似名にテキスト ファイルの名前を変更します:
Rename-Item -Path "\Shared\ITUsers.txt" -NewName "IT_Users.txt"
ファイル拡張子の変更
次も使えます:Rename-Item によりファイル拡張子を変更します。
複数のファイルの拡張子を一度に変更したい場合は、次の PowerShell change file extension を使用します。これにより、すべての txt ファイル拡張子が bak に変更されます。ワイルドカード文字(*)によって、すべてのテキスト ファイルが含まれることが保証されます。
Get-ChildItem \Shared\*.txt | Rename-Item -NewName { $_.name -Replace '.txt','.bak' }
よくある問題のトラブルシューティング
権限の問題
PowerShell を使用しているとき、権限が不十分であることはよくある問題です。典型的なエラーメッセージは「The process does not have access rights to this object.」です。この問題の解決策は次のとおりです:
- システムレベルの操作を行う場合は、PowerShell を管理者として実行してください。
- 必要な権限を付与するために、ACL(Access Control Lists)を変更します。
- 別の認証情報を使用します
昇格された権限で PowerShell を実行するには:
- PowerShell のアイコンを右クリックします。
- 「管理者として実行」を選択します。
- ユーザー アカウント制御(UAC)プロンプトを確認します。
入力ミス
パラメーター名を誤ってタイプしてしまうのは簡単ですが、そうするとエラーになります。長いコマンドを入力するときは、タブ補完を使うか、cmdlet のヘルプを確認できます(Get-Help cmdlet-name -Detailed)。
ファイルは既に存在します
やろうとしていることによっては、既に存在するファイル名が原因でエラーになる場合があります。これを避ける方法の1つとして、前に取り上げたように条件付きコマンドを使用します。
If (-not(Test-Path -Path "C:\temp\example.txt")) {
New-Item -Path "C:\temp\example.txt" -ItemType File
}
実際の活用例
スクリプトの例
PowerShell を使ってログ ファイルを作成できます。ログ記録は、システムの動作、エラー、アプリケーションの挙動を追跡するために不可欠です。PowerShell により、ログ ファイルの作成を自動化できるため、システムの監視がより簡単になります。以下の例では、監査に必要なタイムスタンプ付きのメッセージを簡単にログに記録できる関数を示します。その後、Get-ChildItem cmdlet を使用して、ログ ファイルの作成を確認しました。
PowerShell を使ってスクリプトを作成し、さまざまなタスクを自動化して効率化できます。たとえば、ファイルのバックアップを行うスクリプト、サーバー上の利用可能なディスク容量を確認するスクリプト、重要なシステム サービスを監視するスクリプトを作成できます。
Visual Studio Code の使用
Visual Studio Code(VS Code)で PowerShell をより活用できます。VS Code は多用途のコード エディターで、PowerShell のスクリプト作成や開発に最適な環境を提供します。VS Code と PowerShell 拡張機能をインストールして、構文の強調表示、cmdlet や変数の IntelliSense、コード スニペット、統合デバッグなどの機能を利用できるようにしましょう。エディターには、統合ターミナル付きのカスタマイズ可能なインターフェースが用意されており、PowerShell スクリプトをスムーズに作成・テスト・実行できます。
Visual Studio Code のインストール
- 公式 Web サイトから Visual Studio Code をダウンロードしてインストールしてください:Visual Studio Code。
- インストールしたら、VS Code を開き、サイドバーの四角いアイコンをクリックするか、Ctrl+Shift+X を押して[拡張機能(Extensions)]ビューに移動します。
- [拡張機能(Extensions)]ビューで “PowerShell” 拡張機能を検索し、“Install” をクリックします。この拡張機能は、構文のハイライト、IntelliSense、コードのナビゲーション、デバッグなど、豊富な PowerShell 言語サポートを提供します。
結論
PowerShell は、ファイルおよびシステム管理のための強力なツールです。ファイルやディレクトリを作成、変更、管理するためのさまざまな cmdlet と手法が用意されています。New-Item cmdlet を使用して、必要なファイルを作成できます。その後、より高度なスクリプトを使って複数のファイルを作成したり、既存のファイルを検索したり、それらを移動または削除したりすることも可能です。また、PowerShell スクリプトを使って日常的な作業を自動化し、IT 担当者の時間を確保できます。PowerShell は現在広く利用されているため、学習や探索のためのガイドとなる豊富なリソースがオンラインで提供されています。
よくある質問
ファイル作成時の PowerShell「アクセスが拒否されました」エラーの直し方は?
PowerShell の「アクセスが拒否されました」エラーは、実行ポリシーがファイル操作をブロックしている場合、または対象ディレクトリに対する書き込み権限がない場合に発生します。まず、実行ポリシーを確認してください。
Get-ExecutionPolicy
必要に応じて RemoteSigned または Unrestricted に設定してください:
Set-ExecutionPolicy RemoteSigned
ディレクトリの権限に問題がある場合は、PowerShell を管理者として実行するか、ユーザー プロファイル フォルダーのように書き込み権限のあるディレクトリにファイルを作成してください。ファイルを作成する前に Test-Path でディレクトリの存在を確認します:
if (Test-Path "C:\MyFolder") {
New-Item -Path "C:\MyFolder\file.txt" -ItemType File
}
try-catch ブロックで適切なエラーハンドリングを実装し、権限の失敗をうまく処理できるようにします。システム ディレクトリを扱う場合は、代替の場所を使用するか、昇格した権限の要求を検討してください。企業環境では、スクリプト アカウントに適切な権限があることを確認し、ファイル作成アクセスを付与する際は最小権限の原則に従ってください。権限の問題は、システムの整合性を保護するために設計されたセキュリティ ポリシーを反映していることが多いことを覚えておいてください。
PowerShell でファイルを作成する方法にはどのようなものがありますか?
PowerShell には、さまざまなファイル作成方法が用意されており、それぞれ異なるシナリオ向けに最適化されています:
# Create empty files
New-Item -Path "file.txt" -ItemType File
# Redirect command output to files
Get-Process | Out-File "processes.txt"
# Write data to files
Set-Content -Path "data.txt" -Value "Hello World"
# Append data to files
Add-Content -Path "log.txt" -Value "New entry"
# .NET method for performance-critical operations
[System.IO.File]::WriteAllText("C:\file.txt", "Content")
Export-CSV は、PowerShell オブジェクトから構造化されたデータ ファイルを作成します。各メソッドには特定の用途があります。ファイル システム操作には New-Item、コマンド出力の取得には Out-File、データの置き換えには Set-Content、ログ記録のシナリオには Add-Content を使用します。ファイル作成の要件やデータ処理のニーズに最も合うメソッドを選択してください。
PowerShell で適切なエラーハンドリングを行いながらファイルを作成するには?
PowerShell でファイル作成を行う際に適切なエラーハンドリングを行うことで、スクリプトの失敗を防ぎ、操作が失敗したときに意味のあるフィードバックを提供できます。ファイル作成コマンドを try-catch ブロックで囲みます:
try {
New-Item -Path "C:\MyFolder\file.txt" -ItemType File -ErrorAction Stop
Write-Host "File created successfully"
} catch {
Write-Error "Failed to create file: $($_.Exception.Message)"
}
ディレクトリの存在を確認し、存在しないディレクトリを作成します:
if (-not (Test-Path "C:\MyFolder")) {
New-Item -ItemType Directory -Path "C:\MyFolder" -Force
}
アクセス拒否、ファイルが既に存在する、ディスク容量の制限などの一般的な問題に対して、具体的なエラーハンドリングを実装します。監査目的のために、成功した操作と失敗の両方を記録できるロギング機構を含めてください。終了させないエラーには Write-Error を使用し、スクリプトの実行を停止すべき重大な失敗には throw を使用します。ファイル操作を試す前に入力パラメーターを検証し、何が問題だったのかをユーザーが理解できる明確なエラーメッセージを用意しましょう。運用環境のスクリプトでは、 一時的な失敗に対するリトライロジックと、コンプライアンスおよびトラブルシューティングのための包括的なロギングを実装することを検討してください。
安全な権限で PowerShell ファイルを作成するには?
安全な権限でファイルを作成するには、ファイル作成の最中または作成直後に適切なアクセス制御を設定する必要があります。ファイルを作成し、セキュリティ設定を適用してください:
# Create file
New-Item -Path "C:\secure-file.txt" -ItemType File
# Get current ACL
$acl = Get-Acl "C:\secure-file.txt"
# Modify permissions
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Domain\User", "FullControl", "Allow")
$acl.SetAccessRule($accessRule)
# Apply ACL
Set-Acl -Path "C:\secure-file.txt" -AclObject $acl
機密ファイルの場合は、継承された権限を明示的に削除し、それが必要な特定のユーザーまたはグループにのみアクセスを許可してください。PowerShell のセキュリティ cmdlet を使用して 最小権限アクセスを実装し、ファイルを読み取れるのが認可された担当者のみになるようにします。 一時ファイルを作成する場合は、アクセスを制限した安全な場所に配置し、使用後に削除するためのクリーンアップ手順を実装してください。コンプライアンスに配慮が必要な環境では、アクセス制御リストに監査(audit)設定を含め、ファイルへのアクセス試行を追跡します。ファイルのセキュリティは、「誰がどのデータにアクセスする必要があるのか」を理解し、その要件を実用性を維持しながら強制する制御を実装することから始まる、という点を忘れないでください。
PowerShell のファイル作成が失敗する—よくある原因と解決策は?
PowerShell のファイル作成の失敗は、一般的に権限の問題、無効なパス、または実行ポリシーの制限が原因です。対象のディレクトリが存在することを確認し、必要に応じて作成してください:
if (-not (Test-Path "C:\TargetFolder")) {
New-Item -ItemType Directory -Path "C:\TargetFolder"
}
宛先フォルダーへの書き込み権限があることを確認し、システム ディレクトリを扱う場合は PowerShell を管理者として実行してください。ファイル パスに、Windows がファイル名でサポートしていない無効な文字(パイプ記号、疑問符、引用符など)が含まれていないことを確認します。ディスクの空き容量を確認してください。ドライブが満杯だとファイル作成ができなくなります。PowerShell の実行ポリシーを確認してください:
Get-ExecutionPolicy
# Adjust if needed
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
ネットワークパスの場合は、ファイル作成を試みる前に接続性と認証を確認してください。エラー処理を具体的に行い、失敗が権限、パス、またはシステムリソースによるものかを切り分けます。トラブルシューティングでは、まず単純なファイル作成コマンドでテストし、その後、複雑さを段階的に高めて失敗の特定の原因を特定してください。
共有する
もっと詳しく
著者について
Kevin Horvatin
リード ソフトウェア アーキテクト
Kevin Horvatin は Netwrix のリード ソフトウェア アーキテクトであり、Netwrix Privilege Secure を担当しています。20 年以上のソフトウェア開発経験があり、PowerShell と C# が登場して以来、それらを扱ってきました。