Lenovo WMI BIOS 更改仅保存在第二 运行 秒
Lenovo WMI BIOS Changes save on second run only
我制作了一个 powershell 脚本来查找与某些 bios 设置匹配的东西,然后更改它们。
唯一的问题是,如果我 运行 它一次并重新启动它不会保存设置,尽管我已经成功 returns。如果我运行它两次,设置被保存。
我认为这与我的变量和 foreach 语句有关。谁能告诉我我做错了什么?
#param ([string]$lenovopass)
$lenovopass= "password"
#Search BIOS for Virtual or Items starting with V.
$biosvalues= gwmi -class Lenovo_BiosSetting -namespace root\wmi |
Where-Object {$_.CurrentSetting.split(“,”,[StringSplitOptions]::RemoveEmptyEntries) -match “Virtual” -or $_.CurrentSetting.split(“,”,[StringSplitOptions]::RemoveEmptyEntries) -like "V*”} |
Select-Object -ExpandProperty CurrentSetting
$biossplit= $biosvalues.split(",")[0,1]
#savebiossettings
$SaveBiosPass =(gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi).SaveBiosSettings("$lenovopass,ascii,us") | Out-Null
$SaveBios =(gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi).SaveBiosSettings() | Out-Null
$passcheck= (Get-WmiObject -namespace root\wmi -class Lenovo_BiosPasswordSettings | select -ExpandProperty PasswordState)
Function Lenovonopass{
foreach ($value in $biosvalues)
{If ($value -match "Enable")
{
Write-Host "Found $value"
Write-Host "Current Setting: $value"
Write-Host "No changes made, $value already enabled."
} else {
Write-Host "Found $value"
Write-Host "Current Settings: $value"
$value = $value.split(",")[0,1]
$valuea= $value[0]
$valueb= $value[1]
Write-Host "Changing $value state to Enable"
(gwmi -class Lenovo_SetBiosSetting -namespace root\wmi).SetBiosSetting(“$valuea,Enable”) | Out-Null
$SaveBios
$newvalue = gwmi -class Lenovo_BiosSetting -namespace root\wmi |
Where-Object {$_.CurrentSetting.split(“,”,[StringSplitOptions]::RemoveEmptyEntries) -match "$valuea"} |
Select-Object -ExpandProperty CurrentSetting
write-host "New Settings: $newvalue"
}
}
}
Function LenovoPass{
foreach ($value in $biosvalues)
{If ($value -match "Enable")
{
Write-Host "Found $value"
Write-Host "Current Setting: $value"
Write-Host "No changes made, $value already enabled."
} else {
Write-Host "Found $value"
Write-Host "Current Settings: $value"
$value = $value.split(",")[0,1]
$valuea= $value[0]
$valueb= $value[1]
Write-Host "Changing $value state to Enable"
(gwmi -class Lenovo_SetBiosSetting -namespace root\wmi).SetBiosSetting(“$valuea,Enable,$lenovopass,ascii,us") | Out-Null
$SaveBiosPass
$newvalue = gwmi -class Lenovo_BiosSetting -namespace root\wmi |
Where-Object {$_.CurrentSetting.split(“,”,[StringSplitOptions]::RemoveEmptyEntries) -match "$valuea"} |
Select-Object -ExpandProperty CurrentSetting
write-host "New Settings: $newvalue"
Write-Host ""
}
}
}
IF ($passcheck -eq "0")
{Lenovonopass
$SaveBios
Write-Host "BIOS Changes Saved"
} Else {
Lenovopass
$SaveBiosPass
Write-Host "BIOS Changes Saved"
}
看起来您正在尝试通过调用一个变量来保存 bios 设置,就像它是一个函数一样。
$SaveBios
Write-Host "BIOS Changes Saved"
唯一一次保存设置是在脚本的开头,当您为 $SaveBios
赋值时。
因此,通过 运行 脚本两次,您将保存脚本开头的设置,您之前在 运行 中更改。
您可以改为为 SaveBios 创建一个函数。或在您实际要保存设置时将值分配给 $SaveBios
。
IF ($passcheck -eq "0")
{Lenovonopass
$SaveBios =(gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi).SaveBiosSettings() | Out-Null
Write-Host "BIOS Changes Saved"
} Else {
Lenovopass
$SaveBiosPass =(gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi).SaveBiosSettings("$lenovopass,ascii,us") | Out-Null
Write-Host "BIOS Changes Saved"
}
我制作了一个 powershell 脚本来查找与某些 bios 设置匹配的东西,然后更改它们。
唯一的问题是,如果我 运行 它一次并重新启动它不会保存设置,尽管我已经成功 returns。如果我运行它两次,设置被保存。
我认为这与我的变量和 foreach 语句有关。谁能告诉我我做错了什么?
#param ([string]$lenovopass)
$lenovopass= "password"
#Search BIOS for Virtual or Items starting with V.
$biosvalues= gwmi -class Lenovo_BiosSetting -namespace root\wmi |
Where-Object {$_.CurrentSetting.split(“,”,[StringSplitOptions]::RemoveEmptyEntries) -match “Virtual” -or $_.CurrentSetting.split(“,”,[StringSplitOptions]::RemoveEmptyEntries) -like "V*”} |
Select-Object -ExpandProperty CurrentSetting
$biossplit= $biosvalues.split(",")[0,1]
#savebiossettings
$SaveBiosPass =(gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi).SaveBiosSettings("$lenovopass,ascii,us") | Out-Null
$SaveBios =(gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi).SaveBiosSettings() | Out-Null
$passcheck= (Get-WmiObject -namespace root\wmi -class Lenovo_BiosPasswordSettings | select -ExpandProperty PasswordState)
Function Lenovonopass{
foreach ($value in $biosvalues)
{If ($value -match "Enable")
{
Write-Host "Found $value"
Write-Host "Current Setting: $value"
Write-Host "No changes made, $value already enabled."
} else {
Write-Host "Found $value"
Write-Host "Current Settings: $value"
$value = $value.split(",")[0,1]
$valuea= $value[0]
$valueb= $value[1]
Write-Host "Changing $value state to Enable"
(gwmi -class Lenovo_SetBiosSetting -namespace root\wmi).SetBiosSetting(“$valuea,Enable”) | Out-Null
$SaveBios
$newvalue = gwmi -class Lenovo_BiosSetting -namespace root\wmi |
Where-Object {$_.CurrentSetting.split(“,”,[StringSplitOptions]::RemoveEmptyEntries) -match "$valuea"} |
Select-Object -ExpandProperty CurrentSetting
write-host "New Settings: $newvalue"
}
}
}
Function LenovoPass{
foreach ($value in $biosvalues)
{If ($value -match "Enable")
{
Write-Host "Found $value"
Write-Host "Current Setting: $value"
Write-Host "No changes made, $value already enabled."
} else {
Write-Host "Found $value"
Write-Host "Current Settings: $value"
$value = $value.split(",")[0,1]
$valuea= $value[0]
$valueb= $value[1]
Write-Host "Changing $value state to Enable"
(gwmi -class Lenovo_SetBiosSetting -namespace root\wmi).SetBiosSetting(“$valuea,Enable,$lenovopass,ascii,us") | Out-Null
$SaveBiosPass
$newvalue = gwmi -class Lenovo_BiosSetting -namespace root\wmi |
Where-Object {$_.CurrentSetting.split(“,”,[StringSplitOptions]::RemoveEmptyEntries) -match "$valuea"} |
Select-Object -ExpandProperty CurrentSetting
write-host "New Settings: $newvalue"
Write-Host ""
}
}
}
IF ($passcheck -eq "0")
{Lenovonopass
$SaveBios
Write-Host "BIOS Changes Saved"
} Else {
Lenovopass
$SaveBiosPass
Write-Host "BIOS Changes Saved"
}
看起来您正在尝试通过调用一个变量来保存 bios 设置,就像它是一个函数一样。
$SaveBios
Write-Host "BIOS Changes Saved"
唯一一次保存设置是在脚本的开头,当您为 $SaveBios
赋值时。
因此,通过 运行 脚本两次,您将保存脚本开头的设置,您之前在 运行 中更改。
您可以改为为 SaveBios 创建一个函数。或在您实际要保存设置时将值分配给 $SaveBios
。
IF ($passcheck -eq "0")
{Lenovonopass
$SaveBios =(gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi).SaveBiosSettings() | Out-Null
Write-Host "BIOS Changes Saved"
} Else {
Lenovopass
$SaveBiosPass =(gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi).SaveBiosSettings("$lenovopass,ascii,us") | Out-Null
Write-Host "BIOS Changes Saved"
}