使用automation.runspaces 命名空间给我带来了很多问题。我是一名学生,我在一所大学工作。我正在使用大学计算机和大学域。长话短说,我放弃了使用运行空间,我只是在 c# 中打开 powershell 并执行脚本。那没有用,所以我写了一些 cmd 脚本。这是一个有效的示例:
Powershell脚本:
重命名为 Mac 地址
$OS = Get-WmiObject Win32_OperatingSystem
$NIC = Get-WmiObject Win32_NetworkAdapterConfiguration | where{$_.IPEnabled -eq “TRUE”}
$PC = Get-WmiObject -class Win32_ComputerSystem
if($NIC.MacAddress -eq $null)
{
Write-Host "No Network Connection! The PC will not be renamed until the network is enabled"
}
else
{
$MacAddress = $NIC.MacAddress
$NewPCName = "PC-" + $MacAddress.Substring(0) -replace ':'
$PC.Rename($NewPCName)
Write-Host -ForegroundColor Green "New PC Name"
$NewPCName
}
write-Host "The PC has been renamed and will restart in 5 seconds."
start-sleep -s 5
restart-computer
如果我在 powershell 中运行上面的脚本,它就可以工作。如果我使用 Process.Start(powershell.exe, "C:\myscript"); 在 c# 中它不会运行。即使设置执行策略也无济于事。所以我使用如下的cmd脚本:
cmd脚本:
powershell -noexit -executionpolicy unrestricted "C:\myscript.ps1"
它执行。
现在我有以下内容:
Powershell脚本:
Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -name AutoAdminLogon -value 0 write-host "Changing Registry" Start-Sleep -s 10
cmd脚本:
powershell -noexit -executionpolicy unrestricted "C:\Windows\ITS\ChangeRegistry.ps1"
在我的 Windows 窗体程序中,我有一个按钮单击事件调用 cmd 脚本。看起来它可以工作,没有任何崩溃,cmd按应有的方式执行,它写入主机,它休眠了10秒。但注册表项永远不会改变。但是我的第一个 powershell 重命名脚本和 cmd 示例只需单击 Windows 窗体上的按钮即可完美运行。所以我就是不明白。