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