我希望使用PowerShell脚本来自动执行与用户登录相关的任务。
有时,用户会将其文档文件夹从默认位置移动。如何确定适用于所有特殊文件夹的PowerShell中用户文档文件夹的位置?
我尝试使用基于Lee Holmes工作的PowerShell SHGetKnownFolderPath调用。
由于pinvoke网站上的C#示例未使用StringBuilder,因此我认为它不是必需的,并剥离了builder +“-Using”引用。
作为签名值,然后在PowerShell中使用。
我不明白在两次尝试中哪里出了错。 解决方案:
Kayasax 在 codeplex 上发现的 Windows7Library 二进制文件适用于像我这样的懒人,或者 David Heffernan 的脚本允许更多的自定义,但如果您使用自定义特殊文件夹,则可能需要一些手工操作,但更加可定制,两个答案都是有效的!
有时,用户会将其文档文件夹从默认位置移动。如何确定适用于所有特殊文件夹的PowerShell中用户文档文件夹的位置?
我尝试使用基于Lee Holmes工作的PowerShell SHGetKnownFolderPath调用。
由于pinvoke网站上的C#示例未使用StringBuilder,因此我认为它不是必需的,并剥离了builder +“-Using”引用。
param($KNOWNFOLDERID)
$Pinvoke = @’
[DllImport("shell32.dll")]
public static extern int SHGetKnownFolderPath(
[MarshalAs(UnmanagedType.LPStruct)] Guid rfid,
uint dwFlags,
IntPtr hToken,
out String pszPath // API uses CoTaskMemAlloc
);
‘@
$type = Add-Type -MemberDefinition $Pinvoke
-Name Win32Utils -Namespace SHGetKnownFolderPath
-PassThru
$type::SHGetKnownFolderPath($KNOWNFOLDERID)
我也尝试使用这里的New-PInvoke,将"shell32.dll"作为lib值。
int SHGetKnownFolderPath( [MarshalAs(UnmanagedType.LPStruct)] Guid rfid, uint dwFlags, IntPtr hToken, out String pszPath )
作为签名值,然后在PowerShell中使用。
SHGetKnownFolderPath FDD39AD0-238F-46AF-ADB4-6C85480369C7 0 0 [ref]$path
我以这个错误结束
Argument: '4' should be a System.Management.Automation.PSReference. Use [ref].
At line:1 char:56
+ New-Item Function:Global:SHGetKnownFolderPath -Value { [Microsoft.PowerShell.Com ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : NonRefArgumentToRefParameterMsg
我不明白在两次尝试中哪里出了错。 解决方案:
Kayasax 在 codeplex 上发现的 Windows7Library 二进制文件适用于像我这样的懒人,或者 David Heffernan 的脚本允许更多的自定义,但如果您使用自定义特殊文件夹,则可能需要一些手工操作,但更加可定制,两个答案都是有效的!