繁体   English   中英

如何在 .net 核心应用程序中使用 powershell 启动 Windows 服务?

How to start a Windows service using powershell in a .net core application?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个 .net 应用程序,我希望能够在其中启动和停止在同一台计算机上运行的 Windows 服务。 我能够毫无问题地使用 get-service 拉回服务的状态,但是执行 start-service 不起作用。 没有错误,只是什么都不做。 我首先尝试了这个,没有使用 async Invoke 选项,所以它看起来更像底部的函数。 在本地调试时,不工作,不报错。

using System.Management.Automation;

        private async static Task EditService(string serviceName, string command)
        {
            using (PowerShell PowerShellInst = PowerShell.Create())
            {
                //PowerShellInst.AddCommand(command).AddParameter("Name", serviceName);
                //I tried surrounding serviceName in quotes (but it has no spaces)
                PowerShellInst.AddScript("Start-Service -Name " + serviceName);

                await PowerShellInst.InvokeAsync();
            }         
        }

获取服务状态(这有效):

 public static string GetServiceStatus(string serviceName)
        {            

            using (PowerShell PowerShellInst = PowerShell.Create())
            {
                PowerShellInst.AddScript("Get-Service " + serviceName);

                Collection<PSObject> PSOutput = PowerShellInst.Invoke();

                if (PSOutput == null || PSOutput.Count == 0)
                    return "Unknown";
                else
                    return PSOutput.First().Properties["Status"].Value.ToString();                
            }            
        }
1 个回复

听起来您没有权限,一种选择是设置执行策略

//in powershell
 powershell.AddCommand("Set-ExecutionPolicy").AddArgument("Unrestricted")
.AddParameter("Scope","CurrentUser");

//or using the command prompt like so:
 string powerShellCmd = "/c powershell -executionpolicy unrestricted C:\somePowerShellScript.ps1";
System.Diagnostics.Process.Start("cmd.exe",powerShellCmd);

您可以像这样获取当前用户

WindowsIndentity.GetCurrent().Name

可以选择尝试新的 Host Builder,这是一个带有 .Net Core 原生的新增功能,即没有topshelf

 public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseWindowsService()
            .ConfigureAppConfiguration((context, config) =>
            {
                // configure the app here.
            })
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>();
            });
1 在 Windows 2016 服务器中使用 Powershell 脚本从 Windows 任务计划程序启动应用程序的问题

我必须使用不同的服务帐户用户凭据启动一个应用程序,这项工作是通过在 Windows 任务调度程序上创建的作业完成的,该作业调用 powershell 脚本以作为服务帐户用户打开应用程序。 问题是当这个脚本从任务调度程序执行时,应用程序永远不会启动; 当我单独运行它时,相同的脚本可以完美运行。 下面 ...

2 使用Powershell启动Windows应用程序

我需要通过Powershell脚本启动Outlook并计划它。 当从powershell命令提示符手动运行Outlook时,Powershell脚本能够启动Outlook。 但是,当通过Windows任务计划程序运行相同的脚本时,我只会看到该进程在后台启动,而前端没有正在运行的Out ...

3 如何在.NET核心应用程序中使用.NET核心类库?

特别是在ubuntu上,这似乎不起作用。 例如,如果我这样做: 并将Program.cs修改为: 然后应用程序将编译 ,生成这些工件: ...但执行应用程序失败: 如果我删除using HelloLib行,它的工作原理: 那是怎么回事? 我认为 ...

4 从asp.net核心Web应用程序启动服务

我正在asp.net核心上构建Web应用程序。 我的应用程序每周需要一次一些数据。 我创建了控制台应用程序来获取此数据(实际上,它每周解析一次某个网站并将其存储在数据库中)。 我有配置文件,该控制台应用程序何时应开始获取该数据。 我的问题是如何从Web应用程序启动该控制台应用 ...

5 如何在VB.NET中使用Windows服务应用程序显示通知

我有一个vb.net Windows服务,它自动发送电子邮件从sql server数据库获取地址但我希望这个服务发送通知,如果电子邮件尚未发送或是否已发送或如果它没有找到该文件应该是在电子邮件中。 问题是如何实现这一目标? 我知道Windows服务无法与系统托盘交互,这就是为什么我很难搞 ...

9 .Net应用程序在Windows7计算机中使用Powershell活动目录cmdlet

我正在创建.Net应用程序(C#),以执行一些活动目录操作(还原已删除的对象)。 当我在域控制器上运行应用程序时,该应用程序成功还原了已删除的对象。 如果我在连接到域的Windows7计算机上运行该应用程序,则该应用程序将无法正常工作,并且不会出现任何错误。 除了“远程服务器管理工​​具” ...

10 在另一个.net核心Web应用程序中使用.net核心Web应用程序

我需要创建一个.net核心Web应用程序(或某种.net核心服务),该应用程序可以从各个网站进行抓取并将结果写入数据库。 然后,我需要创建另一个.net核心Web应用程序,其中将对FIRST应用程序中的数据进行一些操作。 但是,我应该能够通过单击按钮从SECOND应用程序启动FIRST应 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM