繁体   English   中英

PowerShell新项目-对象引用未设置为对象的实例

[英]PowerShell New-item - Object reference not set to an instance of an object

我正在Powershell中编写一个工具,其中包括一个根据用户输入创建文件夹结构的功能。 下面是相关代码:

function set-drvsource{
    Write-Host "INFO: Querying Driver Source" -ForegroundColor Yellow
    }
    try{
        Write-Host "INFO: Creating standard folder structure" -ForegroundColor Yellow
        New-Item -ItemType Directory -Path "$drvpath" | Out-Null
        New-Item -ItemType Directory -Path "$drvpath\Source" | Out-Null
        New-Item -ItemType Directory -Path "$drvpath\Package" | Out-Null
    }
    catch{
        Write-Host "ERROR: Could not create folder structure" -ForegroundColor Red
        Exit
    }
    Write-Host "INFO: Moving local source to new source" -ForegroundColor Yellow
    Copy-Item $src "$drvpath\Source" -Recurse
}
function main{
    set-drvsource
}
$drvroot = "\\server\share\tmp"
$src = Read-Host "Please provide local driver source path"
$vendor = Read-Host "Device Vendor eg. DELL, HP, Microsoft"
$dmd = Read-Host "Device Model eg. HP Elitebook 840 G3"
$dos = Read-Host "Operating System eg. W7 or W10"
$dac = Read-Host "x64 or x86"
$drvpath = "$drvroot\$vendor\$dmd $dos $dac"

如果我运行此命令,它将触发catch语句并引发以下错误:

$Error[0]
New-Item : Object reference not set to an instance of an object.
At line:9 char:1
+ New-Item -ItemType Directory -Path "$drvpath" | Out-Null
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [New-Item], NullReferenceException
    + FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShell.Commands.NewI 
   temCommand

有趣的是,如果我在新的PowerShell会话中运行以下命令,它将按预期工作:

$drvroot = "\\server\share\tmp"
$vendor = Read-Host "Vendor"
$dmd = Read-Host "Device Model eg. HP Elitebook 840 G3"
$dos = Read-Host "Operating System eg. W7 or W10"
$dac = Read-Host "x64 or x86"
$drvpath = "$drvroot\$vendor\$dmd $dos $dac"
New-Item -ItemType Directory -Path "$drvpath" | Out-Null
New-Item -ItemType Directory -Path "$drvpath\Source" | Out-Null
New-Item -ItemType Directory -Path "$drvpath\Package" | Out-Null

我已经仔细检查过,并且$ drvpath确实可以保留到函数中,所以这不是范围问题吗? 任何帮助将非常感激! :'(

编辑:$ ERROR [0]的输出| 力量

Exception             : System.NullReferenceException: Object reference not 
                        set to an instance of an object.
                           at Microsoft.ConfigurationManagement.PowerShell.Prov
                        ider.CMDriveProvider.NewItem(String path, String 
                        itemTypeName, Object newItemValue)
                           at System.Management.Automation.SessionStateInternal
                        .NewItemPrivate(CmdletProvider providerInstance, 
                        String path, String type, Object content, 
                        CmdletProviderContext context)
TargetObject          : 
CategoryInfo          : NotSpecified: (:) [New-Item], NullReferenceException
FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShell.Comm
                        ands.NewItemCommand
ErrorDetails          : 
InvocationInfo        : System.Management.Automation.InvocationInfo
ScriptStackTrace      : at set-drvsource, C:\temp\quick
                        import_cli-1.1\quickimport_cli-1.1\Invoke-QuickImport.p
                        s1: line 51
                        at main, C:\temp\quickimport_cl
                        i-1.1\quickimport_cli-1.1\Invoke-QuickImport.ps1: line 
                        101
                        at <ScriptBlock>, C:\temp\quick
                        import_cli-1.1\quickimport_cli-1.1\Invoke-QuickImport.p
                        s1: line 165
PipelineIterationInfo : {}
PSMessageDetails      : 

按照PetSerAl的建议,使用FileSystem提供程序定义$ drvroot变量可以解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM