C# 通过c运行powershell脚本#

C# 通过c运行powershell脚本#,c#,powershell,cmd,C#,Powershell,Cmd,我有几个问题。下面是它的工作原理。在windows窗体上,用户单击按钮。该按钮执行cmd脚本,然后cmd脚本执行powershell脚本 为什么要问cmd脚本?嗯,如果我点击按钮运行powershell脚本,我在签名方面会遇到问题 在powershell脚本的开头,我将执行策略设置为unrestricted。如果我直接通过powershell运行脚本,这会完全改变执行策略,并且脚本可以正常工作。如果我让用户单击按钮运行powershell脚本,它会说我在签名方面有问题,即使执行策略设置为“无限制

我有几个问题。下面是它的工作原理。在windows窗体上,用户单击按钮。该按钮执行cmd脚本,然后cmd脚本执行powershell脚本

为什么要问cmd脚本?嗯,如果我点击按钮运行powershell脚本,我在签名方面会遇到问题

在powershell脚本的开头,我将执行策略设置为unrestricted。如果我直接通过powershell运行脚本,这会完全改变执行策略,并且脚本可以正常工作。如果我让用户单击按钮运行powershell脚本,它会说我在签名方面有问题,即使执行策略设置为“无限制”!荒唐的我发现在cmd脚本中设置执行策略修复了这个问题,这就是我在单击按钮时运行powershell脚本的方式。不管怎样,这是一个工作,它的工作


我现在的问题是我有一个cmd脚本,它调用powershell脚本来更改注册表项。这是通过点击按钮再次完成的。它看起来很好,似乎一切都正常,但键的值没有改变。现在,如果我只是在没有windows窗体应用程序的情况下运行cmd脚本,则键的值会发生变化。为什么会这样?

我认为您的实际问题是“如何从C#调用Powershell脚本,并确保它以管理权限运行?”

答案是“模仿”:


我认为您真正的问题是“如何从C#调用Powershell脚本,并确保它以管理权限运行?”

答案是“模仿”:


使用automation.runspaces命名空间给我带来了很多问题。我是一名学生,我在一所大学工作。我正在使用大学计算机和大学域名。长话短说,我放弃了使用运行空间,我只是用c#打开powershell并执行脚本。这不起作用,所以我写了一些cmd脚本。下面是一个有效的示例:

Powershell脚本:

重命名为Mac地址 如果我在powershell中运行上面的脚本,它就会工作。如果我使用Process.Start(powershell.exe,“C:\myscript”);在c#中,它不会运行。即使设置执行策略也无济于事。因此,我使用cmd脚本,如下所示:

cmd脚本:

powershell-noexit-executionpolicy无限制“C:\myscript.ps1”

它执行

现在我有以下几点:

Powershell脚本:

设置ItemProperty“HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon”-名称AutoAdminLogon-值0 写入主机“更改注册表” 开始睡眠-s10

cmd脚本:

powershell-noexit-executionpolicy无限制“C:\Windows\ITS\ChangeRegistry.ps1”


在我的windows窗体程序中,我有一个按钮单击事件调用cmd脚本。它看起来工作正常,没有崩溃,cmd按它应该的方式执行,它写入主机,它休眠10秒钟。但是注册表项永远不会改变。但我的第一个powershell重命名脚本和cmd示例只需单击windows窗体上的一个按钮就可以完美地工作。所以我不明白。

使用automation.runspaces名称空间给我带来了很多问题。我是一名学生,我在一所大学工作。我正在使用大学计算机和大学域名。长话短说,我放弃了使用运行空间,我只是用c#打开powershell并执行脚本。这不起作用,所以我写了一些cmd脚本。下面是一个有效的示例:

Powershell脚本:

重命名为Mac地址 如果我在powershell中运行上面的脚本,它就会工作。如果我使用Process.Start(powershell.exe,“C:\myscript”);在c#中,它不会运行。即使设置执行策略也无济于事。因此,我使用cmd脚本,如下所示:

cmd脚本:

powershell-noexit-executionpolicy无限制“C:\myscript.ps1”

它执行

现在我有以下几点:

Powershell脚本:

设置ItemProperty“HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon”-名称AutoAdminLogon-值0 写入主机“更改注册表” 开始睡眠-s10

cmd脚本:

powershell-noexit-executionpolicy无限制“C:\Windows\ITS\ChangeRegistry.ps1”

在我的windows窗体程序中,我有一个按钮单击事件调用cmd脚本。它看起来工作正常,没有崩溃,cmd按它应该的方式执行,它写入主机,它休眠10秒钟。但是注册表项永远不会改变。但我的第一个powershell重命名脚本和cmd示例只需单击windows窗体上的一个按钮就可以完美地工作。所以我就是不明白

$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