Powershell 执行console.NET核心程序可以从终端工作,但不能从脚本工作

Powershell 执行console.NET核心程序可以从终端工作,但不能从脚本工作,powershell,.net-core,console,Powershell,.net Core,Console,我一直在开发我的第一个.NET Core控制台程序,并正在努力使其通过多个PowerShell脚本运行。从PowerShell手动执行我的文件重新定位程序时,我会转到相应的目录,并在终端中输入以下内容: dotnet .\FileRelocation.dll [commands for .dll] 这执行起来没有任何问题。但是,当从.ps1文件尝试此操作时,我总是遇到以下错误: dotnet : No executable found matching command "dotnet

我一直在开发我的第一个.NET Core控制台程序,并正在努力使其通过多个PowerShell脚本运行。从PowerShell手动执行我的
文件重新定位
程序时,我会转到相应的目录,并在终端中输入以下内容:

dotnet .\FileRelocation.dll [commands for .dll]
这执行起来没有任何问题。但是,当从
.ps1
文件尝试此操作时,我总是遇到以下错误:

dotnet : No executable found matching command "dotnet-.\FileRelocation.dll"
At \\chimera\home\freerey\My Documents\C# Projects\File Relocation Program\0.5.1 Beta\scripts\pstest.ps1:2 char:1
+ dotnet .\FileRelocation.dll -v -e C:\Users\freerey\Desktop\firelloc ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (No executable f...Relocation.dll":String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
自从最初遇到这个问题以来,我一直尝试在前面写
dotnet ef
,结果被告知Microsoft.EntityFrameworkCore.Tools.CommandException:找不到任何项目。我尝试为我的程序运行
.csproj
文件,而不是.dll,但结果是相同的

我觉得我在这里错过了一些非常明显的东西,但由于我缺乏使用PowerShell的经验,而且我的同事中没有人使用它,我仍然没有找到为什么在手动将此数据输入works时程序无法从脚本运行的原因。程序完全按照预期工作,我知道它没有任何问题;我只需要弄清楚如何让这些脚本停止出错

对于任何好奇的人:我正在运行.NET Core 2.1.507,安装了以下运行时:

  • Microsoft.AspNetCore.All 2.1.11[C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  • Microsoft.AspNetCore.App 2.1.11[C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  • Microsoft.NETCore.App 2.1.11[C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

提前谢谢

您必须记住,当PowerShell运行时,它是在用户级别运行的,除非另有说明。有两种不同的权限,一种是作为管理员运行的权限

C:\Windows\system32

还有一个是用户级的

C:\Users\UserName

换句话说,您必须将PS1脚本视为第一次打开它。解决此问题的方法有很多,但如果您准确地告诉脚本在何处运行该文件,它将起作用

因此,我编写了PowerShell脚本来测试我的Dotnet2.1控制台应用程序,该应用程序会说hello(demo.ps1)

现在请记住,您的应用程序可能比这更复杂,您可以向其中传递参数,但这可能超出了本文的范围

如果您需要更多帮助,请将ps1脚本附加到此帖子,我们可以从那里开始


检查
dotnet
\File\u Relocation.dll
之间的字符实际上是一个空格字符-看起来PowerShell认为您希望它执行的命令名为
dotnet-.\FileRelocation.dll
而不是带有参数
\File\u Relocation.dll
dotnet
,因此“空格”可能是一些奇怪的unicode字符,看起来像一个空格,但PowerShell认为它是可执行文件名的一部分。尝试删除并重新键入
dotnet.\File\u Relocation.dll
以确保…@mclayton我确实尝试过,因为我注意到间距存在一些奇怪的问题,但不管我如何擦除和重新写入行,它仍然返回相同的结果。实际上,错误可能来自
dotnet
而不是powershell-请参阅和中的类似错误-作为测试,请尝试使用
文件\u Relocation.dll
的完整路径,而不是相对路径
\File\u Relocation.dll
。一直以来,澄清.dll的确切位置都是问题所在!在我将其标记为答案之前,我将等待一段时间,因为我们仍然不能完全确定.dll将去哪里,但是这太棒了,泰@弗里瑞,我很好奇你为什么会选择这个特殊的解决方案。请记住,您可以编写一个控制台应用程序,该应用程序可以接受可以传递来组织文件的参数。因此,您可以编写一个windows应用程序(Win forms)来实现同样的功能。我强烈反对使用其他PowerShell脚本作为主要解决方案来执行PowerShell脚本,因为事情很快就会变得一团糟。这个项目的目的是替换一个旧的VB程序,我们用它来做同样的事情。我认为使用.NET Core(在我的工作场所中没有其他人这样做过)会延长程序的使用寿命,而且程序在移动文件时也可以给我发电子邮件——这甚至不是VB版本所做的。@Freerey我本周早些时候忘了回复,对此表示抱歉。如果你的应用程序需要按计划移动文件,你可以轻松地将其添加到windows计划程序中,以便每天、每小时、每分钟等运行。你可以保持应用程序不变,并需要一些说明来设置windows计划程序。请随意添加我对Neil Busse#8054的意见。请记住,你也可以在应用程序中编写代码来记录时间。做同一件事有很多不同的方法。但我认为,这个应用程序最有可能属于负责运行任务的服务器。实际上,我们已经从带有windows scheduler的服务器上运行了脚本,现在它可以正常工作:)
dotnet "C:\Users\Neil\Source\Repos\DemoForStackOverFlow\DemoForStackOverFlow\bin\Debug\netcoreapp2.1\DemoForStackOverFlow.dll"