Я хочу отключить список запускаемых программ с помощью PowerShell. Я зашел так далеко, но затем ударился о стену. В настоящее время я не могу получить второй список запускаемых программ, который мог бы быть похожим на мой первый.
function Disable-Startups {
[CmdletBinding()]
Param(
[parameter(DontShow = $true)]
$32bit = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
[parameter(DontShow = $true)]
$32bitRunOnce = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",
[parameter(DontShow = $true)]
$64bit = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run",
[parameter(DontShow = $true)]
$64bitRunOnce = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnce",
[parameter(DontShow = $true)]
$currentLOU = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
[parameter(DontShow = $true)]
$currentLOURunOnce = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
)
Begin {
$disableList = @(
"iTunesHelper",
"Cisco AnyConnect Secure Mobility Agent for Windows",
"Ccleaner Monitoring",
#"SunJavaUpdateSched",
"Steam",
"Discord"
)
New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS | Out-Null
$startups = Get-CimInstance Win32_StartupCommand | Select-Object Name,Location
}
Process {
foreach ($startUp in $startUps){
if ($startUp.Name -in $disableList){
$number = ($startUp.Location).IndexOf("\")
$location = ($startUp.Location).Insert("$number",":")
Write-Output "Disabling $($startUp.Name) from $location)"
#Remove-ItemProperty -Path "$location" -Name "$($startUp.name)"
}
}
$regStartList = Get-ItemProperty -Path $32bit,$32bitRunOnce,$64bit,$64bitRunOnce,$currentLOU,$currentLOURunOnce | Format-List
}
End {}
}
Итак, в основном, когда $regStartList
запускается, мне нужно отображаемое имя и расположение каждого элемента для каждого реестра, и я хочу поместить все это в одну переменную. но я не могу получить такой хороший список, чтобы быть в списке
Name Location ---- -------- OneDriveSetup HKU\S-1-5-19\SOFTWARE\Microsoft\Windows\CurrentVersion\Run OneDriveSetup HKU\S-1-5-20\SOFTWARE\Microsoft\Windows\CurrentVersion\Run Send to OneNote Startup OneDrive HKU\S-1-5-21-3687383513-804626811-2257261628-1001\SOFTWARE\Microsoft\Windows\CurrentVersion\Run CCleaner Monitoring HKU\S-1-5-21-3687383513-804626811-2257261628-1001\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Но вместо этого получи это, даже если я сбегу.
$regStartList = Get-ItemProperty -Path $32bit,$32bitRunOnce,$64bit,$64bitRunOnce,$currentLOU,$currentLOURunOnce | Select-Object name,location
name location
---- --------
По какой-то причине не удается захватить местоположение или имя / отображаемое имя.
РЕДАКТИРОВАТЬ: Я ответил на свой вопрос, но если у кого-то есть лучший, дайте мне знать.
$regStartList = Get-Item -path $32bit,$32bitRunOnce,$64bit,$64bitRunOnce,$currentLOU,$currentLOURunOnce |
Where-Object {$_.ValueCount -ne 0} | Select-Object property,name
foreach ($regName in $regStartList.name) {
$regNumber = ($regName).IndexOf("\")
$regLocation = ($regName).Insert("$regNumber",":")
if ($regLocation -like "*HKEY_LOCAL_MACHINE*"){
$regLocation = $regLocation.Replace("HKEY_LOCAL_MACHINE","HKLM")
write-host $regLocation
}
if ($regLocation -like "*HKEY_CURRENT_USER*"){
$regLocation = $regLocation.Replace("HKEY_CURRENT_USER","HKCU")
write-host $regLocation
}
foreach($disable in $disableList) {
if (Get-ItemProperty -Path "$reglocation" -name "$Disable"-ErrorAction SilentlyContinue) {
Write-host "yeah i exist"
#Remove-ItemProperty -Path "$location" -Name "$($startUp.name)" -whatif
}else {write-host "no exist"}
}
}