Экспорт результатов Net Use в PowerShell

У меня есть сценарий выхода из системы, который сохраняет сопоставленные сетевые ресурсы в текстовый файл:

#File path for save
$TxtPath = "C:\temp\" + "$env:UserName" + ".txt"

#Clear existing entries in file
Clear-Content -Path $TxtPath

#Return drive letters
$DriveList = Get-PSDrive | Select-Object -ExpandProperty 'Name' | Select-String -Pattern '^[a-b:d-g:i-z]$'

#Get path for each drive letter and save in specific format (letter;path)
Foreach($Item in $DriveList){
$DrivePath = (Get-PSDrive $Item).DisplayRoot
$Entry = -join($Item, ":", ";", $DrivePath)
Add-Content -Path $TxtPath -Value ($Entry)
}

Затем у меня есть сценарий входа, который сбрасывает и сопоставляет эти диски:

#File path for user drive paths
$TxtPath = "C:\temp\" + "$env:UserName" + ".txt"

#Get current drives
$DriveList = Get-PSDrive | Select-Object -ExpandProperty 'Name' | Select-String -Pattern '^[a-b:d-g:i-z]$'

#Remove current drives
ForEach($Item in $DriveList){
    $Drive = -join($Item, ":")
    net use $Drive /delete
}

#Map network drives from file
ForEach($Line in Get-Content $TxtPath) {
    $DriveLetter,$DrivePath = $Line.split(';')
    net use $DriveLetter $DrivePath
}

Моя проблема заключается в том, что, поскольку я использую net use для удаления и сопоставления дисков (в сценарии входа в систему), функция Get-PSDrive в сценарии выхода из системы не возвращает путь к диску. Причина, по которой я использую net use вместо Remove-PSDrive, связана с тем, что диск не был полностью удален (все еще отображается на устройстве пользователя).

Кто-нибудь может сказать мне, как я могу получить значение удаленного имени для общего сетевого ресурса, когда я ищу его с помощью сетевого использования (net use Z:)? Если я смогу просто захватить этот путь (и только этот путь), я смогу записать его в текстовый файл вместе с буквой диска и, таким образом, решить свою проблему.

Я знаю, что могу зафиксировать результаты использования сети, сохранив данные в файл:

net use x: > C:\Temp\output.txt

Однако я не могу сохранить эти данные/одну строку необходимой информации в переменную. Любая помощь приветствуется.


person tacosnooper    schedule 30.05.2018    source источник
comment
Почему вы не используете постоянный параметр?   -  person guiwhatsthat    schedule 30.05.2018
comment
Где? Цель этих скриптов - включить очень простую форму управления профилями, чтобы диски следовали за пользователем независимо от того, на каком устройстве он входит...   -  person tacosnooper    schedule 30.05.2018
comment
хорошо, когда вы меняете устройства, постоянное не поможет.   -  person guiwhatsthat    schedule 30.05.2018
comment
Да... отсюда и сценарий... есть ли у вас какие-нибудь мысли о том, как я могу захватить переменную из сетевого использования?   -  person tacosnooper    schedule 30.05.2018
comment
Я не могу воспроизвести вашу проблему. когда я использую net use и после этого ищу диски с get-psdrive, я получаю корневой путь.   -  person guiwhatsthat    schedule 30.05.2018
comment
Шаги для воспроизведения: подключить сетевые диски -> запустить сценарий выхода из системы -> запустить сценарий входа в систему -> запустить сценарий выхода из системы -> проверить файл с сопоставлениями. Я воспроизвел на двух устройствах, на одном работает наша компания SOE, а на другом — ванильная сборка Win10 1709.   -  person tacosnooper    schedule 30.05.2018


Ответы (1)


Один из способов сделать это — посмотреть непосредственно в реестре:

Get-ChildItem "HKCU:Network\" |
    ForEach-Object {
        [PsCustomObject]@{
            DriveLetter = $_.PSChildName
            RemotePath = (Get-ItemProperty $_.PSPath).RemotePath
        }
    }

Это даст такой вывод:

DriveLetter RemotePath                
----------- ----------                
M           \\server1\share1 
N           \\server2\share2   
O           \\server3\share3

Чтобы сохранить в файл, я бы рекомендовал формат CSV, добавив это после последней скобки:

| Export-Csv <path>\MappedDrive.csv

Затем вы можете снова легко импортировать данные с помощью Import-Csv.

person boxdog    schedule 30.05.2018