Powershell检测方法-文件路径存在,如果存在,请检查文件大小



我对此有点墨守成规,我希望有人能帮我解决这个问题:

我的任务是将一个自定义设置文件放入所有工作站的登录用户的漫游配置文件中。如果以下两个条件之一正确,则需要部署文件:

  1. 文件不在那里
  2. 文件的大小小于正在部署的文件的大小

部署方法很好,但检测方法让我头疼。

Andy Dawson的博客让我大部分时间都在那里,文件大小(长度)对我不起作用。

所以,我的第一个脚本是这样的

第1部分:登录用户

Function CurrentUser {
$LoggedInUser = get-wmiobject win32_computersystem | select username
$LoggedInUser = [string]$LoggedInUser
$LoggedInUser = $LoggedInUser.split(“=”)
$LoggedInUser = $LoggedInUser[1]
$LoggedInUser = $LoggedInUser.split(“}”)
$LoggedInUser = $LoggedInUser[0]
$LoggedInUser = $LoggedInUser.split(“”)
$LoggedInUser = $LoggedInUser[1]
Return $LoggedInUser
}

第2部分:分配用户路径和目标文件变量

$user = CurrentUser
$path = C:Users"+$user+"AppDataRoamingfolderfoldersettings.cfg"
$targetfile = Get-Item $path

第3部分:检测路径存在并检查文件大小

if (( Test-Path $targetfile) -and ((Get-Item $targetfile).length -ge 26831))
{
Write-Host "installed"
}
else
{
Write-Host "NOT installed"
}

如果满足条件1,则此操作有效,但如果不满足,则检测方法将失败,因为$path变量和$targetfile无法填充。

我之所以使用$targetfile变量,是因为其他获取.length的方法似乎是返回字符计数(因此是字符串长度),而不是预期的文件大小值。

回到绘图板上。似乎我只需要从脚本的其余部分开始,分配is条件1不满足,所以…

。。。我的第二个(当前)脚本如下:

第1部分:获取登录用户UNCHANGED THIS BIT'S FINE, BECAUSE IS STOLE IT :)

第2部分:分配用户和用户路径变量(简化为总是可以找到)

$user = CurrentUser
$Userpath = "C:Users"+$user

第3部分:如果路径不存在,则状态存在并检查文件大小

if (-not (Test-Path "$UserpathAppDataRoamingfolderfoldersettings.cfg"))
{
Write-Host "NOT installed"
}
elseif.....

这就是墨守成规的地方!我希望第二次检查与以前一样按照((Get-Item $targetfile).length -ge 26831))的行进行,但我似乎无法在这里获得语法/逻辑。

非常感谢您的帮助!!!

您需要测试文件是否不存在或者是否太小:

if(-not(Test-Path $targetFile) -or (Get-Item $targetFile).Length -lt $newFileSize){
# File either doesn't exist or is incomplete - go ahead and copy the new config file to $targetFile
Copy-Item .pathtoreferenceconfig.cfg -Destination $targetFile -Force
}

相关内容