Как перезагрузить профиль пользователя из файла скрипта в PowerShell

Как говорит API , конструктор ObjectOutputStream записывает заголовок потока сериализации в базовый поток. И этот заголовок ожидается только один раз, в начале файла. Поэтому несколько раз нажимать

new ObjectOutputStream(fos);

на FileOutputStream, который ссылается на один и тот же файл, будет писать заголовок несколько раз и испортить файл.

37
задан Steffen Opel 27 July 2009 в 13:27
поделиться

5 ответов

Почему Вы пытаетесь сделать это?

, поскольку это, вероятно, создаст дубликаты (добавляет к $env:path), и проблемы с установкой постоянных/только для чтения объектов, вызывающих ошибки.

был поток по этой теме недавно на microsoft.public.windows.powershell.

, При попытке сбросить состояние сессии, нет никакого способа сделать это, даже с помощью внутреннего объема ($host.EnterNestedPrompt()) из-за способности установить variables/aliases/... во "всем объеме".

3
ответ дан Richard 28 July 2009 в 00:27
поделиться
  • 1
    Я don' t получают ошибку, когда я выполняю вышеупомянутый код. I' m использование Python 2.6, какую версию Вы используете? – tgray 10 June 2010 в 21:09

Я нашел это обходное решение:

#some-script.ps1

#restart profile (open new powershell session)
cmd.exe /c start powershell.exe -c { Set-Location $PWD } -NoExit
Stop-Process -Id $PID

А более разработанная версия:

#publish.ps1
# Copy profile files to PowerShell user profile folder and restart PowerShell
# to reflect changes. Try to start from .lnk in the Start Menu or
# fallback to cmd.exe.
# We try the .lnk first because it can have environmental data attached
# to it like fonts, colors, etc.

[System.Reflection.Assembly]::LoadWithPartialName("System.Diagnostics")

$dest = Split-Path $PROFILE -Parent
Copy-Item "*.ps1" $dest -Confirm -Exclude "publish.ps1" 

# 1) Get .lnk to PowerShell
# Locale's Start Menu name?...
$SM = [System.Environment+SpecialFolder]::StartMenu
$CurrentUserStartMenuPath = $([System.Environment]::GetFolderPath($SM))
$StartMenuName = Split-Path $CurrentUserStartMenuPath -Leaf                                 

# Common Start Menu path?...
$CAD = [System.Environment+SpecialFolder]::CommonApplicationData
$allUsersPath = Split-Path $([System.Environment]::GetFolderPath($CAD)) -Parent
$AllUsersStartMenuPath = Join-Path $allUsersPath $StartMenuName

$PSLnkPath = @(Get-ChildItem $AllUsersStartMenuPath, $CurrentUserStartMenuPath `
                                        -Recurse -Include "Windows PowerShell.lnk")

# 2) Restart...
# Is PowerShell available in PATH?
if ( Get-Command "powershell.exe" -ErrorAction SilentlyContinue ) {

    if ($PSLnkPath) {

        $pi = New-Object "System.Diagnostics.ProcessStartInfo"
        $pi.FileName = $PSLnkPath[0]
        $pi.UseShellExecute = $true

        # See "powershell -help" for info on -Command
        $pi.Arguments = "-NoExit -Command Set-Location $PWD"

        [System.Diagnostics.Process]::Start($pi)
    }
    else { 

        # See "powershell -help" for info on -Command
        cmd.exe /c start powershell.exe -Command { Set-Location $PWD } -NoExit
    }
}
else {
    Write-Host -ForegroundColor RED "Powershell not available in PATH."
}

# Let's clean up after ourselves...
Stop-Process -Id $PID
2
ответ дан guillermooo 28 July 2009 в 00:27
поделиться

Если Вы хотите глобально обновить свой профиль из сценария, необходимо будет запустить тот "полученный точкой" скрипт.

, Когда Вы запускаете свой скрипт, все выполнения сценария профиля в объеме "сценария" и не измените Ваш "глобальный" объем.

Для сценария для изменения глобальной области видимости это должно быть "точечным источником" или предшествовало с периодом.

. ./yourrestartscript.ps1

, где Вам "получили точкой" Ваш сценарий профиля в "yourrestartscript.ps1". То, что Вы на самом деле делаете, говорит "yourrestartscript" работать в текущей области и в том сценарии, Вы говорите сценарию $profile работать в объеме сценария. Так как объемом сценария является глобальная область видимости, любой набор переменных или команды в Вашем профиле произойдут в глобальной области видимости.

, Который не покупает Вас много преимущества перед выполнением

. $profile
28
ответ дан Steven Murawski 28 July 2009 в 00:27
поделиться
  • 1
    Необходимо назвать его self.le в Вашем __init__ функция. Везде Вы используете его в Вашем Form класс, которым это должно быть self.le. – tgray 10 June 2010 в 20:30

Это всего лишь уточнение двухстрочного скрипта в ответе guillermooo выше, который не получил новую оболочку PowerShell. окно в правильный для меня каталог. Я считаю, что это связано с тем, что $ PWD оценивается в контексте нового окна PowerShell,

0
ответ дан 27 November 2019 в 04:42
поделиться

Я использовал это для поиска и устранения неисправностей то, что профиль брал навсегда для загрузки.

Запускают Выполнение:

powershell_ise -noprofile

Тогда я выполнил это:

function Reload-Profile {
    @(
        $Profile.AllUsersAllHosts,
        $Profile.AllUsersCurrentHost,
        $Profile.CurrentUserAllHosts,
        $Profile.CurrentUserCurrentHost
    ) | % {
        if(Test-Path 

Я использовал это для поиска и устранения неисправностей то, что профиль брал навсегда для загрузки.

Запускают Выполнение:

[110]

Тогда я выполнил это:

[111]

Спасибо @Winston Fassett для получения меня ближе к нахождению моей проблемы.

){ Write-Verbose "Running

Я использовал это для поиска и устранения неисправностей то, что профиль брал навсегда для загрузки.

Запускают Выполнение:

[110]

Тогда я выполнил это:

[111]

Спасибо @Winston Fassett для получения меня ближе к нахождению моей проблемы.

" $measure = Measure-Command {.

Я использовал это для поиска и устранения неисправностей то, что профиль брал навсегда для загрузки.

Запускают Выполнение:

[110]

Тогда я выполнил это:

[111]

Спасибо @Winston Fassett для получения меня ближе к нахождению моей проблемы.

} "$($measure.TotalSeconds) for

Я использовал это для поиска и устранения неисправностей то, что профиль брал навсегда для загрузки.

Запускают Выполнение:

[110]

Тогда я выполнил это:

[111]

Спасибо @Winston Fassett для получения меня ближе к нахождению моей проблемы.

" } } } . Reload-Profile

Спасибо @Winston Fassett для получения меня ближе к нахождению моей проблемы.

0
ответ дан 27 November 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: