После установки нового значения в реестре необходимо сообщить Windows Explorer, что что-то изменилось.
Перезагрузка компьютера сделает это, но вы можете попробовать просто перезапустить процесс проводника:
Stop-Process -ProcessName explorer
Другим подходом может быть использование Win32 API, например:
function Refresh-Explorer {
$code = @'
private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff); // http://www.pinvoke.net/default.aspx/Constants/HWND.html
private const uint WM_SETTINGCHANGE = (uint)0x1a; // http://www.pinvoke.net/default.aspx/Constants/WM.html
private const uint SMTO_ABORTIFHUNG = (uint)0x0002; // http://www.pinvoke.net/default.aspx/Enums/SendMessageTimeoutFlags.html
private const uint SHCNE_ASSOCCHANGED = (uint)0x08000000L; // http://www.pinvoke.net/default.aspx/Enums/SHChangeNotifyEventID.html
private const uint SHCNF_FLUSH = (uint)0x1000; // http://www.pinvoke.net/default.aspx/Enums/SHChangeNotifyFlags.html
[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr SendMessageTimeout (IntPtr hWnd, uint Msg, IntPtr wParam, string lParam, uint fuFlags, uint uTimeout, IntPtr lpdwResult);
[System.Runtime.InteropServices.DllImport("Shell32.dll")]
private static extern int SHChangeNotify(uint eventId, uint flags, IntPtr item1, IntPtr item2);
public static void Refresh() {
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSH, IntPtr.Zero, IntPtr.Zero);
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero, null, SMTO_ABORTIFHUNG, 100, IntPtr.Zero);
}
'@
Add-Type -MemberDefinition $code -Namespace Win32Refresh -Name Explorer
[Win32Refresh.Explorer]::Refresh()
}
# call the above function to tell explorer something has changed
Refresh-Explorer
Надеюсь, что поможет