Функция Set-RunOnce действительно проста для понимания и проста в настройке.
Я бы предложил создать собственную производную функцию, чтобы делать то, что вы хотите, и использовать вместо этого:
function Set-RunOnceForUSB {
# get the driveletter from WMI for the first (possibly only) USB disk
$firstUSB = @(Get-WmiObject -Class Win32_LogicalDisk | Where-Object {$_.DriveType -eq 2} | Select-Object -ExpandProperty DeviceID)[0]
# or use:
# $firstUSB = @(Get-WmiObject Win32_Volume -Filter "DriveType='2'" | Select-Object -ExpandProperty DriveLetter)[0]
# combine that with the name of your script file to create a complete path
$scriptPath = Join-Path -Path $firstUSB -ChildPath 'ServerInstall.ps1'
# create the command string. use double-quotes so the variable $scriptPath gets expanded
$command = "%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -File $scriptPath"
# next, add this to the registry same as the original Set-RunOnce function does
if (-not ((Get-Item -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce).Run )) {
New-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce' -Name 'Run' -Value $command -PropertyType ExpandString
}
else {
Set-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce' -Name 'Run' -Value $command -PropertyType ExpandString
}
}