小编Obs*_*let的帖子

基本 PowerShell 功能无输出

自从我开始使用 PowerShell 以来已经有一段时间了,到今天我可以说我已经完成了很多日常任务。不过,在学校每天都是新的一天,现在,当我开始使用函数时,我再次绊倒......这是我的问题:

即使使用许多初学者教程中的最简单的功能,它也无法在我的工作电脑、家庭电脑和工作管理服务器上运行。

例如:

function MyDate {
    Get-Date
}
Run Code Online (Sandbox Code Playgroud)

将名为 MyDate.ps1 的 PS1 文件保存到本地文件夹,然后从 PowerShell 提示符中运行这个小东西,如下所示

PS C:\PS> C:\PS\MyDate.ps1
Run Code Online (Sandbox Code Playgroud)

这就是 PS-Functions-for-Dummies 教程中准确解释的方式。就在教程中,输出应该显示日期。在我的情况下,什么都没有。没有错误,没有红色 PS 特定信息,什么都没有!如果我在完整脚本中使用该函数,如下所示:

function MyDate {
    Get-Date
}
MyDate

PS C:\PS> C:\PS\MyDate.ps1

Montag, 1. Oktober 2018 19:28:32
Run Code Online (Sandbox Code Playgroud)

好吧,然后我得到日期输出。想知道为什么不直接从提示符处调用而不调用脚本中的函数,因为应该使用函数?再说一遍,在许多非常简单的例子中,它应该可以工作。那么我错在哪里呢?


编辑:不确定现在这是否是向问题添加更多更新的正确政策?

我可能会分享一个更具体的脚本示例以及我如何将其“转换”为函数。简短的例子是:

$myServers = Get-Content D:\Servers\Windows2016.txt
foreach ($myServer in $myServers) {
    Get-Printer -ComputerName $myServer |
        Where-Object {$_.DeviceType -eq "Printer"} |
        Select Name, PortName
}
Run Code Online (Sandbox Code Playgroud)

对于其他支持团队来说,它必须尽可能简单。所以我的想法是围绕这几行“包装”一个函数,以便另一个人可以像这样执行它

C:\Scripts\Our-Printers -File D:\Servers\Windows2016.txt
Run Code Online (Sandbox Code Playgroud)

Our-Printers当然,这将是我的函数名称。

我已经尝试过,但放弃了这些东西,因为它在第一次尝试中不起作用,这就是为什么我想从非常基本的东西开始,目前看来我不明白。但顺便说一句,在脚本中我的函数已经可以工作了,只是它们不需要以示例的方式进行输入。这意味着我在一个大脚本中定义了函数,这样我就可以根据用户输入更改顺序甚至跳过某些函数......

powershell function

2
推荐指数
1
解决办法
2200
查看次数

标签 统计

function ×1

powershell ×1