未保存在PowerShell中的变量

未保存在PowerShell中的变量,powershell,Powershell,编写函数时: function Manage-fullAccess { Param ([Parameter(ValueFromPipelineByPropertyName=$true, Position=0, mandatory=$true)] $user, [string] [Parameter(ValueFromPipelineByPropertyName = $true, Position = 1, mandatory=$t

编写函数时:

function Manage-fullAccess
{
    Param
    ([Parameter(ValueFromPipelineByPropertyName=$true,
    Position=0,
    mandatory=$true)]
    $user,

    [string] [Parameter(ValueFromPipelineByPropertyName = $true,
    Position = 1,
    mandatory=$true)]
    $mailboxName,

    [string] [Parameter(Position = 2)]
    $fullAccess
    ) 
    
    # ...
}

系统提示我提供值,但未保存变量。可能是一些超级新手犯的错误,但我需要帮忙。$user和$mailboxName变量都是空的

在函数末尾添加
返回$user,$mailboxName
是解决此问题的一种方法

function Manage-fullAccess

{
    Param
    ([Parameter(ValueFromPipelineByPropertyName=$true,
    Position=0,
    mandatory=$true)]
    $user,

    [string] [Parameter(ValueFromPipelineByPropertyName = $true,
    Position = 1,
    mandatory=$true)]
    $mailboxName,

    [string] [Parameter(Position = 2)]
    $fullAccess
    ) 
    return $user, $mailboxName
}

这里有两个问题。第一个是从主(外部)作用域引用$user,函数中定义的变量超出了作用域

第二,当变量是引用时,PS会做一些有趣的事情,但是在作用域中没有这样的变量。它悄悄地发明了这样一个变量,并将其留空

您必须学习如何将值从函数内部传递到主作用域。这里的答案有点长。有一些关于作用域的在线帮助。请参阅下面的链接


当它们为空时,您在哪里引用它们?@DougMaurer,当我尝试将它们输入Shell时。因此,在活动会话中,我键入$user,它不返回任何内容。如果在函数内部设置变量,默认情况下,它将不存在于函数外部。相反,您应该从这个函数中输出您想要使用的任何东西作为它的重新运行值。第一个是变量的范围@奥拉夫在这里指明了方向。第二个事实是,当引用一个不存在的变量时,PS会创建该变量,并使其为空。谢谢,这解释了一切。