フォルダーがジャンクション ポイントであるかどうかを PowerShell コードでテストするにはどうすればよいですか?
6 に答える
If (Get-Item Test Folder ).Attributes.ToString().Contains("ReparsePoint"){コード}
このブログをご覧ください: https ://web.archive.org/web/20190422210654/https://devblogs.microsoft.com/powershell/viewing-junctions-with-dir/
これを行う方法は、組み込みのファイルシステムフォーマットファイルをコピーし、ジャンクションが示されるように変更してから、Update-FormatDataを使用してロードすることです。
ブログから:
ファイルシステムのフォーマット規則はにあり
$pshome\FileSystem.Format.ps1xml
ます。これをコピーしてから、要素 で「Mode」の値を持つPropertyName[ViewDefinitions –> View –> TableControl –> TableRowEntries –> TableRowEntry –> TableColumnItems –> TableColumnItem]
のコンテンツを次のように変更しました。<ScriptBlock> "$($_.Mode)$(if($_.Attributes -band [IO.FileAttributes]::ReparsePoint) {'J'})" </ScriptBlock>
これは、DirectoryInfoオブジェクトのAttributesプロパティ(
$_.Attributes
)で.NetSystem.IO.FileAttributes.ReparsePoint
列挙値に対してビット単位のANDを実行します。結果がゼロでない場合は、他のファイルモード属性の横に「J」が表示されます。次に、次のように新しいフォーマットファイルをロードします。PS> Update-FormatData -PrependPath myFilesystem.format.ps1xml
PrependPathパラメーターは、新しいフォーマットファイルが組み込みのフォーマットファイルの前にロードされることを保証します。
ディレクトリリンクのモード列に「J」があり、機能しているようです。
ジャンクションのモード列Jにあります。
参考までに、 PowerShell Community Extensionsを実行している場合、この情報は Get-ChildItem の出力で出力 (およびメモ プロパティ) として利用できます。
21> gci .\Roaming\Microsoft\eHome
Directory: Microsoft.PowerShell.Core\FileSystem::C:\Users...
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2/15/2010 12:18 AM <DIR> DvdCoverCache
d---- 8/9/2009 1:10 AM <SYMLINK> DvdInfoCache [\...
d---- 8/8/2009 11:51 PM <DIR> DvdInfoCache.orig
d---- 10/22/2009 7:12 PM <DIR> mcl_images
ただし、プログラムによるアクセスの場合、他のポスターが示唆するように、Attributes プロパティを介して情報にアクセスします。
ジャンクションを使用している場合に推奨する PowerShell Community Extensions がある場合は、次の手順を実行して、フォルダーがジャンクションであるかどうかを判断できます。
Import-Module pscx
if ((Get-Item *test_folder*).ReparsePoint){
Write-Host "YES"
}