Powershell 检测方法 - 文件路径存在,如果存在则检查文件大小
Powershell Detection Method - File path exists, and if so check filesize
我对此有点不适应,希望有人能帮我解决这个问题:
我的任务是将自定义设置文件放入所有工作站的已登录用户的漫游配置文件中。
如果 2 个条件之一正确,则需要部署该文件:
- 文件不存在。
- 文件的大小小于正在部署的文件。
部署方式不错,检测方式很头疼
Andy Dawson's blog 对我来说很重要,文件大小(长度)位对我不起作用。
所以,我的第一个脚本是这样的:
第 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+"\AppData\Roaming\folder\folder\settings.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 的方法似乎返回的是字符数(因此是字符串长度)而不是预期的文件大小值。
回到绘图板。看来我只需要从脚本的其余部分开始,分配条件 1 不满足,所以...
...我的第二个(当前)脚本是这样的:
第 1 部分:获取登录用户
UNCHANGED THIS BIT'S FINE, BECAUSE IS STOLE IT :)
第 2 部分:分配 User 和 Userpath 变量(已简化,因为总能找到这个变量)
$user = CurrentUser
$Userpath = "C:\Users\"+$user
第 3 部分:如果路径不存在,则状态存在并检查文件大小
if (-not (Test-Path "$Userpath\AppData\Roaming\folder\folder\settings.cfg"))
{
Write-Host "NOT installed"
}
elseif.....
...这就是车辙开始的地方!我希望第二次检查像以前一样按照 ((Get-Item $targetfile).length -ge 26831))
进行,但我似乎无法在此处获得 syntax/logic。
非常感谢任何帮助!!!
您需要测试文件 是否不存在 或者是否太小:
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 .\path\to\reference\config.cfg -Destination $targetFile -Force
}
我对此有点不适应,希望有人能帮我解决这个问题:
我的任务是将自定义设置文件放入所有工作站的已登录用户的漫游配置文件中。 如果 2 个条件之一正确,则需要部署该文件:
- 文件不存在。
- 文件的大小小于正在部署的文件。
部署方式不错,检测方式很头疼
Andy Dawson's blog 对我来说很重要,文件大小(长度)位对我不起作用。
所以,我的第一个脚本是这样的:
第 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+"\AppData\Roaming\folder\folder\settings.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 的方法似乎返回的是字符数(因此是字符串长度)而不是预期的文件大小值。
回到绘图板。看来我只需要从脚本的其余部分开始,分配条件 1 不满足,所以...
...我的第二个(当前)脚本是这样的:
第 1 部分:获取登录用户
UNCHANGED THIS BIT'S FINE, BECAUSE IS STOLE IT :)
第 2 部分:分配 User 和 Userpath 变量(已简化,因为总能找到这个变量)
$user = CurrentUser
$Userpath = "C:\Users\"+$user
第 3 部分:如果路径不存在,则状态存在并检查文件大小
if (-not (Test-Path "$Userpath\AppData\Roaming\folder\folder\settings.cfg"))
{
Write-Host "NOT installed"
}
elseif.....
...这就是车辙开始的地方!我希望第二次检查像以前一样按照 ((Get-Item $targetfile).length -ge 26831))
进行,但我似乎无法在此处获得 syntax/logic。
非常感谢任何帮助!!!
您需要测试文件 是否不存在 或者是否太小:
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 .\path\to\reference\config.cfg -Destination $targetFile -Force
}