假设我在一个模块(称为 MyModule.psm1,在模块的适当位置)中有以下代码:
function new-function{
$greeting='hello world'
new-item -path function:\ -name write-greeting -value {write-output $greeting} -Options AllScope
write-greeting
}
Run Code Online (Sandbox Code Playgroud)
导入模块并运行 new-function 后,我可以成功调用 write-greeting 函数(由 new-function 创建)。
当我尝试在 new-function 调用范围之外调用 write-greeting 函数时,它失败了,因为该函数不存在。
我试过 dot-sourcing 新功能,但这无济于事。我已经提供了-option Allscope, 但显然它只包含在子作用域中。
我还尝试使用 export-modulemember write-greeting 明确遵循 new-item 调用,该调用不会出错,但也不会创建函数。
我希望能够从模块内部的函数动态创建一个函数(即通过 new-item,因为函数的内容和名称将根据输入而变化),并使新创建的函数可用于在模块外部调用。
具体来说,我希望能够做到这一点:
Import-module MyModule
New-Function
write-greeting
Run Code Online (Sandbox Code Playgroud)
并看到“hello world”作为输出
有任何想法吗?
我尝试在一个PowerShell命令中创建一个文件夹和一个文件:我试过:
New-Item hello\test\ (New-Item hello\test\file.txt -type file) -type directory -Force
Run Code Online (Sandbox Code Playgroud)
和
New-Item file.txt (New-Item hello\test\ -type direcotry) -type file -Force
Run Code Online (Sandbox Code Playgroud)
但两者似乎都没有按预期工作.我想要实现的是创建一个命令hello\test\file.txt
我正在运行vagrantwinrm 命令,并且注意到失败的命令不会打印出整个错误输出...我认为|可能用于扩展此类命令的输出...但是经过一些互联网搜索并尝试一些选项,例如:
| fl| Format-Table -Wrap -Au我仍然...在错误消息的最终输出中得到 a ,即在命令回显的部分。
NewItemIOError
At line:1 char:1
+ New-Item -path C:\var\lib\kubelet\etc\kubernetes\pki\ -type SymbolicL ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
上述失败的发生有一个明显而明显的原因,所以我不需要帮助调试问题,而是通常想知道使用什么正确的选项New-Item来确保 powershell 向我显示其失败执行的完整输出在具有 10000 行日志的自动化环境中。
从 new-item 和类似的 powershell 命令输出详细错误消息的最简单方法是什么?
我写了一个非常简单的脚本来获取一个随机的免费驱动器号。该函数找到一个随机的空闲字母,创建一个该驱动器字母名称的新空文本文件,例如。Q.txt
然后我将该值作为 $new_letter 返回,但是当它以某种方式从函数中出来时,新创建的文件路径是变量的一部分 C:\AppPack\Logs\Q.txt Q
是不是New-Item我的$new_letter变量有问题?
function get_drive_letter()
{
$letter_acquired = $false
Do
{
$new_letter = Get-ChildItem function:[h-z]: -Name | ForEach-Object { if (!(Test-Path $_)){$_} } | random -Count 1 | ForEach-Object {$_ -replace ':$', ''}
write-host ("RIGHT AFTER " + $new_letter)
if (!(test-path "C:\AppPack\Logs\$new_letter.txt"))
{
New-Item -Path C:\AppPack\Logs\ -Name "$new_letter.txt" -ItemType "file"
write-host ("FROM FUNCTION " + $new_letter)
$letter_acquired = $true
return $new_letter
}
else
{
write-host ("LETTER USED ALREADY")
write-host ($new_letter)
} …Run Code Online (Sandbox Code Playgroud)