我对Powershell和stackoverflow还比较陌生,所以很抱歉出现错误。我一直在为自己设定这样的工作,所以非常感谢任何帮助。
因此,我试图编写一个脚本,将只有管理员才能访问的源文件夹(包含.ps1脚本(和用户可以访问的文件夹(包含指向源文件夹的运行.ps1脚本的快捷方式(的内容进行比较
源文件夹中显示的任何内容,如果快捷方式文件夹中没有相关文件,都会被删除,源文件夹中没有显示的任何东西,都会在快捷方式文件夹创建一个新的快捷方式(我完全不知道如何在powershell中创建快捷方式,更不用说如何进入高级选项并将其设置为以管理员身份运行(
我正在处理这个脚本的开头,试图获得可用格式中缺少的文件名
现在这就是我的
$sourcelist = Get-ChildItem -path "C:UsersyoDocumentsPowershell Labdump" | Get-ItemPropertyvalue -name "name"
$shortcutlist = Get-ChildItem -path "C:UsersyoDocumentsPowershell Labfixes" | Get-ItemPropertyvalue -name "name"
$dif = Compare-Object -ReferenceObject $sourcelist -DifferenceObject $shortcutlist
$arr = $dif -split "=" -split ";"
$arr[1]
$arr[6]
$arr[11]
此输出
abc.txt
find.ps1
hello!.txt
(仍然不知道我会如何分割不同的文件,以便能够引用它们来创建快捷方式,稍后无法使用(
这种使用-split的方法可以满足我的需要(返回$shortcutlist中缺少的文件名(,但它需要我为它可能找到的(可能被分配的(重复$arr[x]
到目前为止$dif输出这个
InputObject SideIndicator
----------- -------------
abc.txt <=
find.ps1 <=
hello!.txt <=
尝试
Compare-Object -ReferenceObject $sourcelist -DifferenceObject
$shortcutlist | get-itemproperty -name "inputobject"
输出
Cannot find path 'C:windowssystem32@{InputObject=abc.txt; SideIndicator=<=}' because it does not exist.
即使这样做有效,我也不确定如何选择每个文件(这是另一个时间的问题(
我修复它的一个潜在想法是把我认为是$dif的字符串输出变成一个对象?真的对此一无所知,所以不确定输出是否就是你所说的字符串。
不管怎样,谢谢你的时间,任何信息都很感激。如果你想用完全不同的方式来做,请告诉我:(
最终,我喜欢修改它,以便能够检查文件夹等中文件的内容,但现在我只是在做这件事。
不使用-split
,而是使用Where-Object
cmdlet根据SideIndicator
的值筛选Compare-Object
的输出,然后使用ForEach-Object
仅获取每个结果对象的InputObject
属性的值:
$sourceNoShortcutList = Compare-Object -ReferenceObject $sourcelist -DifferenceObject $shortcutlist |Where-Object SideIndicator -eq '<=' |ForEach-Object InputObject
即使这样做有效,我也不确定如何选择每个文件(这是另一个时间的问题(
在结果数组上循环:
foreach($filename in $sourceNoShortcutList){
$filePath = Join-Path "C:UsersyoDocumentsPowershell Labdump" $fileName
Remove-Item -LiteralPath $filePath
}