This is the part of a script which create symlinks in system folders depending on special names of the directory being parsed.
$linkTarget = Join-Path -Path $folder["SystemFolder"] -ChildPath $subfolder.Name
if (-not (Test-Path -Path $linkTarget)) {
Create-Symlink -SourcePath $subfolder.FullName -TargetPath $linkTarget
} else {
Write-Host "$linkTarget already exists" -ForegroundColor Yellow
}
($folder["SystemFolder"]
is from the hashtable which associate my own "special names" with system folder paths.)
For example, if the current folder name is "S:\MyStuff\_PData" and $subfolder.Name
is "My Folder", the script will create a symlink "My Folder" in C:\ProgramData (so "C:\ProgramData\My Folder\" will be valid path, and will shows what's in "S:\MyStuff_PData\My Folder").
I'm am not a Powershell expert, and I've been able to check if the symlink $subfolder.Name
already exists by "collecting" various samples and answers and learning from those.
But I need also to check if the link is still valid (i mean: if it still points to $subfolder.Name
), and "repair" it if not. How can i do this?
Assuming you have 2 folders:
Source: C:\Test\Test1 (The S Drive in your case)
Link: C:\Test\Test2 (The ProgramData in your case)
Your Link has a property to access the Source folder, called Target.
(Get-Item -Path "C:\Test\Test2").Target
I wouldn't do this unless you have confirmed the linkTarget folder exists, but this would be the way to confirm everything is setup properly:
(Get-Item -Path $linkTarget).Target -eq $subfolder.FullName
I think putting this in full context:
$linkTarget = Join-Path -Path $folder["SystemFolder"] -ChildPath $subfolder.Name
# Check If Link Folder Exists
if (-not (Test-Path -Path $linkTarget)) {
# Doesn't Exist, Create It
Create-Symlink -SourcePath $subfolder.FullName -TargetPath $linkTarget
} else {
# Check If Symlink Exists and Matches - Otherwise could be a regular folder or unmatching symlink
if (Get-Item -Path $linkTarget).Target -ne $subfolder.FullName)
{
# Delete Folder - This is Setup Incorrectly
Remove-Item $linkTarget -Force
# Recreate Symlink
Create-Symlink -SourcePath $subfolder.FullName -TargetPath $linkTarget
}
else
{
Write-Host "$linkTarget already exists" -ForegroundColor Yellow
}
}