Powershel hatası

Windows 10 ile ilgili bilgi paylaşım alanıdır
Cevapla
Kullanıcı avatarı
Email Bot
Kilobyte3
Kilobyte3
Mesajlar: 401
Kayıt: 20 Mar 2022, 23:50
Teşekkür etti: 2 kez
Teşekkür edildi: 35 kez

Powershel hatası

Mesaj gönderen Email Bot »

Selamlar powershell çalışmıyor. açılırken kapanıyor. powershell 7 yükledim ama hermes for windows çalıştıramadım. yardımcı olurmusunuz
Kullanıcı avatarı
velociraptor
Yottabyte4
Yottabyte4
Mesajlar: 55085
Kayıt: 14 Mar 2006, 02:33
cinsiyet: Erkek
Teşekkür etti: 21504 kez
Teşekkür edildi: 12613 kez

Re: Powershel hatası

Mesaj gönderen velociraptor »

Başlat menüsünden PowerShell 7 veya pwsh uygulamasını açmayı dene. Pencere hemen kapanıyorsa, Win + R tuşlarına basıp şu komutu çalıştır :
pwsh -NoProfile
Bu şekilde açılıyorsa sorun büyük ihtimalle profil dosyasındadır. Profil dosyasını yeniden adlandırmak için aşağıdaki komutu çalıştır :
Rename-Item $PROFILE "$PROFILE.old" -ErrorAction SilentlyContinue
Ardından PowerShell’i tekrar aç. pwsh -NoProfile de kapanıyorsa PowerShell’i Ayarlar > Uygulamalar > Yüklü uygulamalar > PowerShell 7 > Kaldır yoluyla kaldırıp, yalnızca resmi Microsoft/GitHub kaynağından yeniden kurmayı dene. Hermes’in kurulum yönergesinde özellikle powershell.exe mi yoksa pwsh.exe mi istendiğini de kontrol et; PowerShell 7’nin çalıştırılabilir dosyası pwsh.exe’dir. Ayrıca PowerShell’i doğrudan kısayoldan değil, Komut İstemi açıp şu komutla başlatmak hata mesajını görmeyi sağlar :
pwsh
PowerShell’in açılır açılmaz kapanması bazen profil betiğinden, bazen bozuk kurulumdan, bazen de Hermes’in yanlış kabuk/parametreyle çalıştırılmasından kaynaklanır. PowerShell 7 kurmak, powershell.exe komutunu otomatik olarak PowerShell 7’ye dönüştürmez. (AI)
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15735
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2762 kez
Teşekkür edildi: 5718 kez

Re: Powershel hatası

Mesaj gönderen TRWE_2012 »

Email Bot yazdı: 02 Eyl 2026, 13:48 Selamlar powershell çalışmıyor. açılırken kapanıyor. powershell 7 yükledim ama hermes for windows çalıştıramadım. yardımcı olurmusunuz
Merhabalar.

Gerçi bizim Admin ne yapacağınızı anlatmış ama bende @Tarkan_Dost'un mesajına "betikleme yönünden" bir otomasyon ile cevap yazayım dedim ve aşağıda size özel bir .bat (.cmd) betiği tasarladım.


PowerShell_Diagnostic_Repair.TR.cmd (not : önce versiyon -0 ile kontrol et adım adım onaylayarak git.Eğer herşey yolunda giderse asıl betik versiyon-1 kullan...)

Versiyon -0

Kod: Tümünü seç

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

set "DESKTOP=%USERPROFILE%\Desktop"
set "LOGFILE=%DESKTOP%\PowerShell_Tani_Raporu.txt"

echo PowerShell Tani ve Onarim Raporu > "%LOGFILE%"
echo Olusturulma: %DATE% %TIME% >> "%LOGFILE%"
echo. >> "%LOGFILE%"

echo ===================================================
echo   PowerShell Tani ve Onarim Araci
echo ===================================================
echo.
echo Bu arac yalnizca bilgi okur ve Masaustune bir rapor yazar.
echo PowerShell 7 profil dosyanizi yalnizca 4. adimdaki soruda
echo acikca onay verirseniz yeniden adlandirir.
echo.

REM Adim 1 - PowerShell 7 (pwsh.exe) kurulu mu kontrol edilir
echo [1/5] PowerShell 7 (pwsh.exe) kontrol ediliyor...
where pwsh >nul 2>&1
if %ERRORLEVEL%==0 (
    echo   PowerShell 7 PATH icinde bulundu. >> "%LOGFILE%"
    echo   PowerShell 7 PATH icinde bulundu.
) else (
    echo   PowerShell 7 PATH icinde bulunamadi. >> "%LOGFILE%"
    echo   PowerShell 7 PATH icinde bulunamadi.
    echo   Kurulum adresi: https://github.com/PowerShell/PowerShell/releases
    echo   Kurulum adresi: https://github.com/PowerShell/PowerShell/releases >> "%LOGFILE%"
    goto :RAPOR
)

REM Adim 2 - pwsh -NoProfile ile acilis testi
echo [2/5] "pwsh -NoProfile" acilisi test ediliyor...
pwsh -NoProfile -Command "exit 0"
if %ERRORLEVEL%==0 (
    echo   pwsh -NoProfile basariyla acildi. >> "%LOGFILE%"
    echo   pwsh -NoProfile basariyla acildi.
) else (
    echo   pwsh -NoProfile acilamadi. Kurulum bozuk olabilir. >> "%LOGFILE%"
    echo   pwsh -NoProfile acilamadi. Kurulum bozuk olabilir.
    echo   Oneri: PowerShell 7'yi Ayarlar'dan kaldirip resmi kaynaktan >> "%LOGFILE%"
    echo   yeniden kurun. >> "%LOGFILE%"
    echo   Oneri: PowerShell 7'yi resmi kaynaktan yeniden kurun.
    goto :RAPOR
)

REM Adim 3 - Execution Policy kontrolu
echo [3/5] Execution Policy kontrol ediliyor...
for /f "delims=" %%P in ('pwsh -NoProfile -Command "Get-ExecutionPolicy"') do set "EXECPOLICY=%%P"
echo   Mevcut execution policy: !EXECPOLICY! >> "%LOGFILE%"
echo   Mevcut execution policy: !EXECPOLICY!
if /I "!EXECPOLICY!"=="Restricted" (
    echo   UYARI: Restricted politikasi profil betiklerinin calismasini engelleyebilir. >> "%LOGFILE%"
    echo   UYARI: Restricted politikasi profil betiklerinin calismasini engelleyebilir.
)

REM Adim 4 - profil dosyasi kontrolu ve profille acilis testi
echo [4/5] PowerShell 7 profili kontrol ediliyor...
for /f "delims=" %%R in ('pwsh -NoProfile -Command "$PROFILE"') do set "PROFILEPATH=%%R"

if not exist "!PROFILEPATH!" (
    echo   Profil dosyasi bulunamadi. Cokme nedeni bu degil. >> "%LOGFILE%"
    echo   Profil dosyasi bulunamadi. Cokme nedeni bu degil.
    goto :ADIM5
)

echo   Profil dosyasi bulundu: !PROFILEPATH! >> "%LOGFILE%"
echo   Profil dosyasi bulundu: !PROFILEPATH!
echo.
echo   Not: bu test yalnizca PowerShell'in profilinizi yuklerken bildirdigi
echo   hata sayisini olcer. Hata vermeden konsolu tamamen dondurup kilitleyen
echo   bir profili YAKALAMAZ - pencere yanit vermez hale gelirse elle kapatip
echo   bu araci tekrar calistirin.
echo   Not: yalnizca hata sayisi olculur, kilitlenmeler yakalanmaz. >> "%LOGFILE%"
echo.
echo   Profil ILE acilis test ediliyor...
for /f "delims=" %%E in ('pwsh -Command "exit $Error.Count"') do set "ERRCOUNT=%%E"

if "!ERRCOUNT!"=="0" (
    echo   Profil ILE acilis, hicbir hata bildirilmeden tamamlandi. >> "%LOGFILE%"
    echo   Profil ILE acilis, hicbir hata bildirilmeden tamamlandi.
    goto :ADIM5
)

echo   Profil ILE acilis !ERRCOUNT! hata bildirdi. >> "%LOGFILE%"
echo   Profil ILE acilis !ERRCOUNT! hata bildirdi.
echo   Sorun buyuk ihtimalle profil betiginin icindedir. >> "%LOGFILE%"
echo.
set /p "YENIDENADCEVAP=Profil, PowerShell'in temiz baslamasi icin *.old olarak yeniden adlandirilsin mi? (E/H, varsayilan H): "

if /I not "!YENIDENADCEVAP!"=="E" (
    echo   Kullanici yeniden adlandirmayi atladi. Profilde degisiklik yapilmadi. >> "%LOGFILE%"
    echo   Yeniden adlandirma atlandi. Profilde degisiklik yapilmadi.
    echo   Oneri: !PROFILEPATH! dosyasini bir editorde acip elle inceleyin. >> "%LOGFILE%"
    goto :ADIM5
)

pwsh -NoProfile -Command "Rename-Item -Path $PROFILE -NewName ($PROFILE + '.old') -ErrorAction Stop" 2>>"%LOGFILE%"
if %ERRORLEVEL%==0 (
    echo   Profil *.old olarak yeniden adlandirildi. PowerShell'i tekrar acmayi deneyin. >> "%LOGFILE%"
    echo   Profil *.old olarak yeniden adlandirildi. PowerShell'i tekrar acin.
) else (
    echo   Yeniden adlandirma basarisiz oldu - hata icin gunlugu inceleyin. Hicbir sey degistirilmedi. >> "%LOGFILE%"
    echo   Yeniden adlandirma basarisiz oldu - hata icin gunlugu inceleyin. Hicbir sey degistirilmedi.
)

:ADIM5
REM Adim 5 - Hermes calistirilabilir dosya hatirlatmasi
echo [5/5] Hermes for Windows hakkinda hatirlatma...
echo   Hermes, pwsh.exe (PowerShell 7) uygulamasini cagiracak sekilde >> "%LOGFILE%"
echo   ayarlanmalidir; powershell.exe (dahili Windows PowerShell 5.1) DEGIL. >> "%LOGFILE%"
echo   Hermes'in kisayol/hedef alanindaki calistirilabilir dosya adini kontrol edin. >> "%LOGFILE%"
echo   Hermes pwsh.exe cagirmali, powershell.exe degil. Kisayol ayarlarini kontrol edin.

:RAPOR
echo.
echo Tani raporu kaydedildi: "%LOGFILE%"
echo.
echo Press ENTER to exit.
pause >nul
endlocal

Versiyon -1

Kod: Tümünü seç

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

set "DESKTOP=%USERPROFILE%\Desktop"
set "LOGFILE=%DESKTOP%\PowerShell_Tani_Raporu.txt"

echo PowerShell Tani ve Onarim Raporu > "%LOGFILE%"
echo Olusturulma: %DATE% %TIME% >> "%LOGFILE%"
echo. >> "%LOGFILE%"

echo ===================================================
echo   PowerShell Tani ve Onarim Araci
echo ===================================================
echo.

REM Adim 1 - PowerShell 7 (pwsh.exe) kurulu mu kontrol edilir
echo [1/5] PowerShell 7 (pwsh.exe) kontrol ediliyor...
where pwsh >nul 2>&1
if %ERRORLEVEL%==0 (
    echo   PowerShell 7 PATH icinde bulundu. >> "%LOGFILE%"
    echo   PowerShell 7 PATH icinde bulundu.
) else (
    echo   PowerShell 7 PATH icinde bulunamadi. >> "%LOGFILE%"
    echo   PowerShell 7 PATH icinde bulunamadi.
    echo   Kurulum adresi: https://github.com/PowerShell/PowerShell/releases
    echo   Kurulum adresi: https://github.com/PowerShell/PowerShell/releases >> "%LOGFILE%"
    goto :RAPOR
)

REM Adim 2 - pwsh -NoProfile ile acilis testi
echo [2/5] "pwsh -NoProfile" acilisi test ediliyor...
pwsh -NoProfile -Command "exit 0"
if %ERRORLEVEL%==0 (
    echo   pwsh -NoProfile basariyla acildi. >> "%LOGFILE%"
    echo   pwsh -NoProfile basariyla acildi.
) else (
    echo   pwsh -NoProfile acilamadi. Kurulum bozuk olabilir. >> "%LOGFILE%"
    echo   pwsh -NoProfile acilamadi. Kurulum bozuk olabilir.
    echo   Oneri: PowerShell 7'yi Ayarlar'dan kaldirip resmi kaynaktan >> "%LOGFILE%"
    echo   yeniden kurun. >> "%LOGFILE%"
    echo   Oneri: PowerShell 7'yi resmi kaynaktan yeniden kurun.
    goto :RAPOR
)

REM Adim 3 - Execution Policy kontrolu
echo [3/5] Execution Policy kontrol ediliyor...
for /f "delims=" %%P in ('pwsh -NoProfile -Command "Get-ExecutionPolicy"') do set "EXECPOLICY=%%P"
echo   Mevcut execution policy: !EXECPOLICY! >> "%LOGFILE%"
echo   Mevcut execution policy: !EXECPOLICY!
if /I "!EXECPOLICY!"=="Restricted" (
    echo   UYARI: Restricted politikasi profil betiklerinin calismasini engelleyebilir. >> "%LOGFILE%"
    echo   UYARI: Restricted politikasi profil betiklerinin calismasini engelleyebilir.
)

REM Adim 4 - Profil dosyasi kontrolu ve profille acilis testi
echo [4/5] PowerShell profili kontrol ediliyor...
for /f "delims=" %%R in ('pwsh -NoProfile -Command "$PROFILE"') do set "PROFILEPATH=%%R"
if exist "!PROFILEPATH!" (
    echo   Profil dosyasi bulundu: !PROFILEPATH! >> "%LOGFILE%"
    echo   Profil dosyasi bulundu: !PROFILEPATH!
    echo   Profil ILE acilis test ediliyor...
    pwsh -Command "exit 0"
    if !ERRORLEVEL! NEQ 0 (
        echo   Profil ILE acilis basarisiz oldu. Sorun buyuk ihtimalle profildedir. >> "%LOGFILE%"
        echo   Profil ILE acilis basarisiz oldu. Sorun buyuk ihtimalle profildedir.
        pwsh -NoProfile -Command "Rename-Item $PROFILE ($PROFILE + '.old') -ErrorAction SilentlyContinue"
        echo   Profil yedek olarak *.old uzantisiyla yeniden adlandirildi. >> "%LOGFILE%"
        echo   PowerShell'i tekrar acmayi deneyin. >> "%LOGFILE%"
        echo   Profil *.old olarak yedeklendi. PowerShell'i tekrar acin.
    ) else (
        echo   Profil ILE acilis basarili oldu. Sorun profilden kaynaklanmiyor. >> "%LOGFILE%"
        echo   Profil ILE acilis basarili oldu. Sorun profilden kaynaklanmiyor.
    )
) else (
    echo   Profil dosyasi bulunamadi. Cokme nedeni bu degil. >> "%LOGFILE%"
    echo   Profil dosyasi bulunamadi. Cokme nedeni bu degil.
)

REM Adim 5 - Hermes calistirilabilir dosya hatirlatmasi
echo [5/5] Hermes for Windows hakkinda hatirlatma...
echo   Hermes, pwsh.exe (PowerShell 7) uygulamasini cagiracak sekilde >> "%LOGFILE%"
echo   ayarlanmalidir; powershell.exe (dahili Windows PowerShell 5.1) DEGIL. >> "%LOGFILE%"
echo   Hermes'in kisayol/hedef alanindaki calistirilabilir dosya adini kontrol edin. >> "%LOGFILE%"
echo   Hermes pwsh.exe cagirmali, powershell.exe degil. Kisayol ayarlarini kontrol edin.

:RAPOR
echo.
echo Tani raporu kaydedildi: "%LOGFILE%"
echo.
echo Press ENTER to exit.
pause >nul
endlocal
Açıklama :

Betik ne yapıyor:

1.pwsh.exe PATH içinde var mı kontrol eder , yoksa kurulum linkini gösterir ve durur
2.pwsh -NoProfile ile açılış testi yapar , başarısızsa kurulumun bozuk olduğunu bildirir
3.Get-ExecutionPolicy çıktısını okur, Restricted ise uyarır
4.Profil dosyasının var olup olmadığını kontrol eder; profille açılış başarısızsa dosyayı otomatik olarak .old uzantısıyla yedekler (silmez, yeniden adlandırır , güvenli)
5.Hermes'in pwsh.exe mi yoksa powershell.exe mi çağırması gerektiğini hatırlatır

Ek bir betik daha..(Eğer Powershell ortamınızı onarabilirseniz) Profil dosyasını yedekleyen/geri yükleyen .ps1 betiği

PowerShellProfile_BackupRestore.TR.ps1

Kod: Tümünü seç

# PowerShellProfile_BackupRestore.TR.ps1
# PowerShell kullanıcı profilini yedeklemek ve geri yüklemek için basit menü tabanlı araç.
# Windows PowerShell 5.1 ve PowerShell 7.x ile uyumludur.

# UTF-8 encoding sabitleme bloğu (Türkçe karakterlerin doğru görüntülenmesi için)
$OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

$DesktopPath  = [Environment]::GetFolderPath("Desktop")
$BackupFolder = Join-Path $DesktopPath "PowerShell_Profil_Yedekleri"

if (-not (Test-Path $BackupFolder)) {
    New-Item -ItemType Directory -Path $BackupFolder | Out-Null
}

function Show-Menu {
    Clear-Host
    Write-Host "==================================================="
    Write-Host "  PowerShell Profili Yedekleme ve Geri Yükleme Aracı"
    Write-Host "==================================================="
    Write-Host ""
    Write-Host "Profil yolu    : $PROFILE"
    Write-Host "Yedek klasörü  : $BackupFolder"
    Write-Host ""
    Write-Host "[1] Mevcut profili yedekle"
    Write-Host "[2] En son yedeği geri yükle"
    Write-Host "[3] Yedek listesinden seçerek geri yükle"
    Write-Host "[4] Çıkış"
    Write-Host ""
}

function Backup-Profile {
    if (Test-Path $PROFILE) {
        $timestamp  = Get-Date -Format "yyyyMMdd_HHmmss"
        $backupName = "Profil_Yedek_$timestamp.ps1"
        $backupPath = Join-Path $BackupFolder $backupName
        Copy-Item -Path $PROFILE -Destination $backupPath -Force
        Write-Host "Yedek oluşturuldu: $backupPath" -ForegroundColor Green
    }
    else {
        Write-Host "Şu yolda profil dosyası bulunamadı: $PROFILE" -ForegroundColor Yellow
        Write-Host "Yedeklenecek bir şey yok."
    }
}

function Restore-SpecificBackup {
    param($BackupFile)

    $profileDir = Split-Path $PROFILE -Parent
    if (-not (Test-Path $profileDir)) {
        New-Item -ItemType Directory -Path $profileDir -Force | Out-Null
    }

    if (Test-Path $PROFILE) {
        $safetyName = "Geri_Yukleme_Oncesi_Guvenlik_" + (Get-Date -Format "yyyyMMdd_HHmmss") + ".ps1"
        $safetyPath = Join-Path $BackupFolder $safetyName
        Copy-Item -Path $PROFILE -Destination $safetyPath -Force
        Write-Host "Mevcut profil güvenlik kopyası olarak kaydedildi: $safetyPath" -ForegroundColor Cyan
    }

    Copy-Item -Path $BackupFile.FullName -Destination $PROFILE -Force
    Write-Host "Profil şu yedekten geri yüklendi: $($BackupFile.Name)" -ForegroundColor Green
}

function Restore-LatestBackup {
    $backups = Get-ChildItem -Path $BackupFolder -Filter "Profil_Yedek_*.ps1" -ErrorAction SilentlyContinue |
        Sort-Object LastWriteTime -Descending

    if ($backups.Count -eq 0) {
        Write-Host "Şu klasörde yedek bulunamadı: $BackupFolder" -ForegroundColor Yellow
        return
    }

    Restore-SpecificBackup -BackupFile $backups[0]
}

function Restore-FromList {
    $backups = Get-ChildItem -Path $BackupFolder -Filter "Profil_Yedek_*.ps1" -ErrorAction SilentlyContinue |
        Sort-Object LastWriteTime -Descending

    if ($backups.Count -eq 0) {
        Write-Host "Şu klasörde yedek bulunamadı: $BackupFolder" -ForegroundColor Yellow
        return
    }

    Write-Host ""
    for ($i = 0; $i -lt $backups.Count; $i++) {
        Write-Host "[$($i + 1)] $($backups[$i].Name)  ($($backups[$i].LastWriteTime))"
    }
    Write-Host ""

    $choice = Read-Host "Geri yüklenecek yedeğin numarasını girin (iptal için C)"
    if ($choice -eq "C" -or $choice -eq "c") {
        return
    }

    $index = 0
    $isNumeric = [int]::TryParse($choice, [ref]$index)
    if (-not $isNumeric -or $index -lt 1 -or $index -gt $backups.Count) {
        Write-Host "Geçersiz seçim." -ForegroundColor Red
        return
    }

    Restore-SpecificBackup -BackupFile $backups[$index - 1]
}

# Ana döngü
$running = $true
while ($running) {
    Show-Menu
    $selection = Read-Host "Bir seçenek seçin"

    switch ($selection) {
        "1" { Backup-Profile }
        "2" { Restore-LatestBackup }
        "3" { Restore-FromList }
        "4" { $running = $false }
        default { Write-Host "Geçersiz seçenek." -ForegroundColor Red }
    }

    if ($running) {
        Write-Host ""
        Read-Host "Devam etmek için ENTER'a basın"
    }
}

Read-Host "`nPress ENTER to exit."
PowerShellProfile_BackupRestore.TR.v2.0.PRO.ps1

Kod: Tümünü seç

# PowerShellProfile_BackupRestore_TR.ps1
# Windows PowerShell 5.1 ve PowerShell 7.x profil dosyalarını tarayan,
# yedekleyen ve geri yükleyen; kullanıcının seçtiği yedek klasörünü
# hatırlayarak bir sonraki çalıştırmada tekrar sormayan araç.

$OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

$ConfigDir  = Join-Path $env:APPDATA "PowerShellProfileBackupTool"
$ConfigFile = Join-Path $ConfigDir "settings.json"

function Get-PS7Home {
    $cmd = Get-Command "pwsh.exe" -ErrorAction SilentlyContinue
    if ($cmd) {
        return Split-Path $cmd.Source -Parent
    }
    $candidate = Join-Path $env:ProgramFiles "PowerShell\7"
    if (Test-Path $candidate) {
        return $candidate
    }
    return $null
}

function Get-ProfileDefinitions {
    $documents = [Environment]::GetFolderPath("MyDocuments")
    $winPSHome = Join-Path $env:WINDIR "System32\WindowsPowerShell\v1.0"
    $ps7Home   = Get-PS7Home

    $definitions = New-Object System.Collections.Generic.List[object]

    $definitions.Add([PSCustomObject]@{
        Id    = "WinPS51_CurrentUser_AllHosts"
        Label = "Windows PowerShell 5.1 - Kullanıcı - Tüm Hostlar"
        Path  = Join-Path $documents "WindowsPowerShell\profile.ps1"
    })
    $definitions.Add([PSCustomObject]@{
        Id    = "WinPS51_CurrentUser_CurrentHost"
        Label = "Windows PowerShell 5.1 - Kullanıcı - Konsol Host"
        Path  = Join-Path $documents "WindowsPowerShell\Microsoft.PowerShell_profile.ps1"
    })
    $definitions.Add([PSCustomObject]@{
        Id    = "WinPS51_AllUsers_AllHosts"
        Label = "Windows PowerShell 5.1 - Tüm Kullanıcılar - Tüm Hostlar"
        Path  = Join-Path $winPSHome "profile.ps1"
    })
    $definitions.Add([PSCustomObject]@{
        Id    = "WinPS51_AllUsers_CurrentHost"
        Label = "Windows PowerShell 5.1 - Tüm Kullanıcılar - Konsol Host"
        Path  = Join-Path $winPSHome "Microsoft.PowerShell_profile.ps1"
    })

    $definitions.Add([PSCustomObject]@{
        Id    = "PS7_CurrentUser_AllHosts"
        Label = "PowerShell 7.x - Kullanıcı - Tüm Hostlar"
        Path  = Join-Path $documents "PowerShell\profile.ps1"
    })
    $definitions.Add([PSCustomObject]@{
        Id    = "PS7_CurrentUser_CurrentHost"
        Label = "PowerShell 7.x - Kullanıcı - Konsol Host"
        Path  = Join-Path $documents "PowerShell\Microsoft.PowerShell_profile.ps1"
    })

    if ($ps7Home) {
        $definitions.Add([PSCustomObject]@{
            Id    = "PS7_AllUsers_AllHosts"
            Label = "PowerShell 7.x - Tüm Kullanıcılar - Tüm Hostlar"
            Path  = Join-Path $ps7Home "profile.ps1"
        })
        $definitions.Add([PSCustomObject]@{
            Id    = "PS7_AllUsers_CurrentHost"
            Label = "PowerShell 7.x - Tüm Kullanıcılar - Konsol Host"
            Path  = Join-Path $ps7Home "Microsoft.PowerShell_profile.ps1"
        })
    }
    else {
        Write-Host "PowerShell 7.x kurulumu tespit edilemedi; yalnızca Windows PowerShell 5.1 profilleri taranacak." -ForegroundColor Yellow
    }

    $seenPaths = New-Object System.Collections.Generic.HashSet[string] ([StringComparer]::OrdinalIgnoreCase)
    foreach ($def in $definitions) {
        [void]$seenPaths.Add($def.Path)
    }

    # Bu aracı çalıştıran oturumun bildirdiği gerçek $PROFILE yollarını da
    # listeye ekle. Bu, standart isimler dışında bir profil dosya adı
    # kullanan host'ları (örneğin bir IDE'nin tümleşik terminalini) yakalar.
    $runtimeMap = [ordered]@{
        "AllUsersAllHosts"       = "Mevcut Oturum - Tüm Kullanıcılar - Tüm Hostlar"
        "AllUsersCurrentHost"    = "Mevcut Oturum - Tüm Kullanıcılar - $($Host.Name)"
        "CurrentUserAllHosts"    = "Mevcut Oturum - Kullanıcı - Tüm Hostlar"
        "CurrentUserCurrentHost" = "Mevcut Oturum - Kullanıcı - $($Host.Name)"
    }
    foreach ($key in $runtimeMap.Keys) {
        $path = $PROFILE.$key
        if ($path -and -not $seenPaths.Contains($path)) {
            $definitions.Add([PSCustomObject]@{
                Id    = "Runtime_$key"
                Label = $runtimeMap[$key]
                Path  = $path
            })
            [void]$seenPaths.Add($path)
        }
    }

    # Visual Studio Code'un tümleşik terminali kendi profil dosya adını kullanır.
    $vscodeCandidates = @(
        [PSCustomObject]@{ Id = "VSCode_WinPS51_CurrentUser"; Label = "Windows PowerShell 5.1 - Kullanıcı - VS Code Host"; Path = Join-Path $documents "WindowsPowerShell\Microsoft.VSCode_profile.ps1" }
        [PSCustomObject]@{ Id = "VSCode_PS7_CurrentUser";     Label = "PowerShell 7.x - Kullanıcı - VS Code Host";        Path = Join-Path $documents "PowerShell\Microsoft.VSCode_profile.ps1" }
    )
    foreach ($cand in $vscodeCandidates) {
        if (-not $seenPaths.Contains($cand.Path)) {
            $definitions.Add($cand)
            [void]$seenPaths.Add($cand.Path)
        }
    }

    return $definitions
}

function Get-SavedBackupRoot {
    if (Test-Path $ConfigFile) {
        try {
            $settings = Get-Content -Path $ConfigFile -Raw | ConvertFrom-Json
            if ($settings.BackupRoot) {
                return $settings.BackupRoot
            }
        }
        catch {
            return $null
        }
    }
    return $null
}

function Save-BackupRoot {
    param([string]$Path)
    if (-not (Test-Path $ConfigDir)) {
        New-Item -ItemType Directory -Path $ConfigDir -Force | Out-Null
    }
    $settings = [PSCustomObject]@{ BackupRoot = $Path }
    $settings | ConvertTo-Json | Set-Content -Path $ConfigFile -Encoding UTF8
}

function Read-BackupRoot {
    $saved = Get-SavedBackupRoot
    if ($saved) {
        Write-Host "Kayıtlı yedek klasörü bulundu: $saved"
        $answer = Read-Host "Bu klasör kullanılsın mı? (E/H, varsayılan E)"
        if ([string]::IsNullOrWhiteSpace($answer) -or $answer -eq "E" -or $answer -eq "e") {
            if (-not (Test-Path $saved)) {
                New-Item -ItemType Directory -Path $saved -Force | Out-Null
            }
            return $saved
        }
    }

    $defaultPath = Join-Path ([Environment]::GetFolderPath("Desktop")) "PowerShell_Profil_Yedekleri"
    $userInput = Read-Host "Yedek klasörü yolunu girin (varsayılan için boş bırakın: $defaultPath)"
    $chosen = if ([string]::IsNullOrWhiteSpace($userInput)) { $defaultPath } else { $userInput }

    if (-not (Test-Path $chosen)) {
        New-Item -ItemType Directory -Path $chosen -Force | Out-Null
    }

    Save-BackupRoot -Path $chosen
    return $chosen
}

function Set-NewBackupRoot {
    $userInput = Read-Host "Yeni yedek klasörü yolunu girin"
    if ([string]::IsNullOrWhiteSpace($userInput)) {
        Write-Host "Yol girilmedi, klasör değiştirilmedi." -ForegroundColor Yellow
        return $script:BackupRoot
    }
    if (-not (Test-Path $userInput)) {
        New-Item -ItemType Directory -Path $userInput -Force | Out-Null
    }
    Save-BackupRoot -Path $userInput
    Write-Host "Yedek klasörü güncellendi: $userInput" -ForegroundColor Green
    return $userInput
}

function Show-DetectedProfiles {
    $definitions = Get-ProfileDefinitions
    Write-Host ""
    Write-Host "Tespit edilen profil yolları:"
    Write-Host ""
    foreach ($def in $definitions) {
        $status = if (Test-Path $def.Path) { "Bulundu" } else { "Bulunamadı" }
        Write-Host ("[{0}] {1}" -f $status, $def.Label)
        Write-Host ("      {0}" -f $def.Path)
    }
    Write-Host ""
}

function Backup-Profiles {
    param([string]$BackupRoot)

    $definitions = Get-ProfileDefinitions
    $existing = $definitions | Where-Object { Test-Path $_.Path }

    if ($existing.Count -eq 0) {
        Write-Host "Yedeklenecek profil dosyası bulunamadı." -ForegroundColor Yellow
        return
    }

    $timestamp   = Get-Date -Format "yyyyMMdd_HHmmss"
    $sessionName = "Yedek_$timestamp"
    $sessionPath = Join-Path $BackupRoot $sessionName
    New-Item -ItemType Directory -Path $sessionPath -Force | Out-Null

    $manifest = @()

    foreach ($def in $existing) {
        $destName = "$($def.Id).ps1"
        $destPath = Join-Path $sessionPath $destName
        try {
            Copy-Item -Path $def.Path -Destination $destPath -Force -ErrorAction Stop
            $manifest += [PSCustomObject]@{
                Id           = $def.Id
                Label        = $def.Label
                OriginalPath = $def.Path
                FileName     = $destName
            }
            Write-Host "Yedeklendi: $($def.Label)" -ForegroundColor Green
            Write-Host "  Kaynak: $($def.Path)"
        }
        catch {
            Write-Host "Yedeklenemedi: $($def.Label)" -ForegroundColor Red
            Write-Host "  $($_.Exception.Message)"
        }
    }

    if ($manifest.Count -eq 0) {
        Write-Host "Hiçbir dosya yedeklenemedi." -ForegroundColor Yellow
        Remove-Item -Path $sessionPath -Recurse -Force -ErrorAction SilentlyContinue
        return
    }

    $manifestPath = Join-Path $sessionPath "manifest.json"
    $manifest | ConvertTo-Json | Set-Content -Path $manifestPath -Encoding UTF8

    Write-Host ""
    Write-Host "Yedekleme tamamlandı. Yedek seti kaydedildi: $sessionPath" -ForegroundColor Green
}

function Get-BackupSets {
    param([string]$BackupRoot)

    if (-not (Test-Path $BackupRoot)) {
        return @()
    }

    Get-ChildItem -Path $BackupRoot -Directory -Filter "Yedek_*" -ErrorAction SilentlyContinue |
        Where-Object { Test-Path (Join-Path $_.FullName "manifest.json") } |
        Sort-Object LastWriteTime -Descending
}

function Restore-BackupSet {
    param([System.IO.DirectoryInfo]$SessionFolder)

    $manifestPath = Join-Path $SessionFolder.FullName "manifest.json"
    $manifest = Get-Content -Path $manifestPath -Raw | ConvertFrom-Json

    $safetyRoot = Join-Path $SessionFolder.FullName ("Geri_Yükleme_Öncesi_Güvenlik_" + (Get-Date -Format "yyyyMMdd_HHmmss"))
    $restoredCount = 0

    foreach ($entry in $manifest) {
        $sourceFile = Join-Path $SessionFolder.FullName $entry.FileName
        if (-not (Test-Path $sourceFile)) {
            Write-Host "Yedek dosyası eksik, atlandı: $($entry.FileName)" -ForegroundColor Yellow
            continue
        }

        $targetDir = Split-Path $entry.OriginalPath -Parent
        try {
            if (-not (Test-Path $targetDir)) {
                New-Item -ItemType Directory -Path $targetDir -Force | Out-Null
            }

            if (Test-Path $entry.OriginalPath) {
                if (-not (Test-Path $safetyRoot)) {
                    New-Item -ItemType Directory -Path $safetyRoot -Force | Out-Null
                }
                $safetyName = "$($entry.Id).ps1"
                Copy-Item -Path $entry.OriginalPath -Destination (Join-Path $safetyRoot $safetyName) -Force
            }

            Copy-Item -Path $sourceFile -Destination $entry.OriginalPath -Force -ErrorAction Stop
            Write-Host "Geri yüklendi: $($entry.Label)" -ForegroundColor Green
            Write-Host "  Hedef: $($entry.OriginalPath)"
            $restoredCount++
        }
        catch {
            Write-Host "Geri yüklenemedi: $($entry.Label)" -ForegroundColor Red
            Write-Host "  $($_.Exception.Message)"
        }
    }

    Write-Host ""
    if ($restoredCount -gt 0) {
        Write-Host "Geri yükleme tamamlandı. $restoredCount profil dosyası geri yüklendi." -ForegroundColor Green
    }
    else {
        Write-Host "Hiçbir profil dosyası geri yüklenmedi." -ForegroundColor Yellow
    }
    if (Test-Path $safetyRoot) {
        Write-Host "Geri yükleme öncesi güvenlik kopyaları kaydedildi: $safetyRoot" -ForegroundColor Cyan
    }
}

function Restore-LatestBackupSet {
    param([string]$BackupRoot)
    $sets = Get-BackupSets -BackupRoot $BackupRoot
    if ($sets.Count -eq 0) {
        Write-Host "Şu klasörde yedek seti bulunamadı: $BackupRoot" -ForegroundColor Yellow
        return
    }
    Restore-BackupSet -SessionFolder $sets[0]
}

function Restore-FromBackupList {
    param([string]$BackupRoot)
    $sets = Get-BackupSets -BackupRoot $BackupRoot
    if ($sets.Count -eq 0) {
        Write-Host "Şu klasörde yedek seti bulunamadı: $BackupRoot" -ForegroundColor Yellow
        return
    }

    Write-Host ""
    for ($i = 0; $i -lt $sets.Count; $i++) {
        Write-Host "[$($i + 1)] $($sets[$i].Name)  ($($sets[$i].LastWriteTime))"
    }
    Write-Host ""

    $choice = Read-Host "Geri yüklenecek yedek setinin numarasını girin (iptal için C)"
    if ($choice -eq "C" -or $choice -eq "c") {
        return
    }

    $index = 0
    $isNumeric = [int]::TryParse($choice, [ref]$index)
    if (-not $isNumeric -or $index -lt 1 -or $index -gt $sets.Count) {
        Write-Host "Geçersiz seçim." -ForegroundColor Red
        return
    }

    Restore-BackupSet -SessionFolder $sets[$index - 1]
}

function Show-Menu {
    param([string]$BackupRoot)
    Clear-Host
    Write-Host "==================================================="
    Write-Host "  PowerShell Profili Yedekleme ve Geri Yükleme Aracı"
    Write-Host "==================================================="
    Write-Host ""
    Write-Host "Aracı çalıştıran PowerShell sürümü : $($PSVersionTable.PSVersion)"
    Write-Host "Yedek klasörü                      : $BackupRoot"
    Write-Host ""
    Write-Host "[1] Mevcut profilleri yedekle"
    Write-Host "[2] En son yedek setini geri yükle"
    Write-Host "[3] Yedek setleri listesinden seçerek geri yükle"
    Write-Host "[4] Tespit edilen profil yollarını göster"
    Write-Host "[5] Yedek klasörünü değiştir"
    Write-Host "[6] Çıkış"
    Write-Host ""
}

# Ana döngü
$BackupRoot = Read-BackupRoot
$running = $true

while ($running) {
    Show-Menu -BackupRoot $BackupRoot
    $selection = Read-Host "Bir seçenek seçin"

    switch ($selection) {
        "1" { Backup-Profiles -BackupRoot $BackupRoot }
        "2" { Restore-LatestBackupSet -BackupRoot $BackupRoot }
        "3" { Restore-FromBackupList -BackupRoot $BackupRoot }
        "4" { Show-DetectedProfiles }
        "5" { $BackupRoot = Set-NewBackupRoot }
        "6" { $running = $false }
        default { Write-Host "Geçersiz seçenek." -ForegroundColor Red }
    }

    if ($running) {
        Write-Host ""
        Read-Host "Devam etmek için ENTER'a basın"
    }
}

Read-Host "`nPress ENTER to exit."
Mesela ben hiçbir profil dosyaysı yok..
Resim
Komut : (bunu olduğu gibi yapıştırın)

Kod: Tümünü seç

$Host.Name
>> Test-Path $PROFILE.CurrentUserCurrentHost
>> $PROFILE | Format-List *
Kullanıcı avatarı
burak35
Zettabyte4
Zettabyte4
Mesajlar: 18250
Kayıt: 07 Eki 2016, 13:06
cinsiyet: Erkek
Teşekkür etti: 10625 kez
Teşekkür edildi: 12435 kez

Re: Powershel hatası

Mesaj gönderen burak35 »

sıfırdan temiz kurulum işe yarayabilir. tabikide kullanılan hesap admin olursa iyi olur diye tahmin ediyorum.
Kullanıcı avatarı
Kayserilifatih
Exabyte1
Exabyte1
Mesajlar: 10502
Kayıt: 30 Ağu 2024, 20:48
cinsiyet: Erkek
Teşekkür etti: 979 kez
Teşekkür edildi: 7850 kez

Re: Powershel hatası

Mesaj gönderen Kayserilifatih »

Bende de PowerShell çalışmıyor Allah'tan fazla işim düşmüyor da sorun olmuyor. Kullandığım sistem 11 25H2 9168 yapısı
Kullanıcı avatarı
burak35
Zettabyte4
Zettabyte4
Mesajlar: 18250
Kayıt: 07 Eki 2016, 13:06
cinsiyet: Erkek
Teşekkür etti: 10625 kez
Teşekkür edildi: 12435 kez

Re: Powershel hatası

Mesaj gönderen burak35 »

ilginç bi şekilde bende powershell çalışıyo. ama herhangi bir birleşen kaldırmak istediğimde kaldırmıyo. hata veriyo.
ve kendi kendine kapanıyo. bende hiç uğraşmadım. bıraktım. öylece duruyo. nadiren ufak tefek basit işler için kullanıyorum.
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15735
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2762 kez
Teşekkür edildi: 5718 kez

Re: Powershel hatası

Mesaj gönderen TRWE_2012 »

burak35 yazdı: 06 Eyl 2026, 14:27 ilginç bi şekilde bende powershell çalışıyo. ama herhangi bir birleşen kaldırmak istediğimde kaldırmıyo. hata veriyo.
ve kendi kendine kapanıyo. bende hiç uğraşmadım. bıraktım. öylece duruyo. nadiren ufak tefek basit işler için kullanıyorum.
Resim
Winlogo+R = Çalıştır Kutucuğu =

Kod: Tümünü seç

gpedit.msc
PowerShell betiklerini çalıştırabilmek için "Turn on Script Execution" (Komut Dosyası Çalıştırmayı Aç) ayarını değiştirmen gerekiyor.

Adımlar:

"Turn on Script Execution" satırına çift tıkla
"Enabled" (Etkin) seçeneğini işaretle
Alt kısımda "Options" (Seçenekler) bölümünde açılır menüden şunlardan birini seç:
"Allow all scripts" (Tüm betiklere izin ver) - En esnek
"Allow local scripts and signed remote scripts" (Yerel betiklere ve imzalı uzak betiklere izin ver) - Daha güvenli (önerilen)
"Apply" (Uygula) "OK" (Tamam)
Bilgisayarı yeniden başlatın veya PowerShell'i kapatıp aç

Not: Bu ayarı yaptıktan sonra hala sorun yaşarsan, dosyaya sağ tıklayıp "Özellikler" > "Engellemeyi Kaldır" kutucuğunu işaretlemeyi unutmamalısın..

NOT :

Ekran görüntüsünde görünen Windows PowerShell Grup İlkesi ayarları şunlardır:

PowerShell Ayarları:

1.Turn on Module Logging (Modül Günlük Tutmayı Aç)
PowerShell modüllerinin kullanımını kaydeder
Hangi modüllerin yüklendiğini ve kullanıldığını izlemek için

2.Turn on PowerShell Script Block Logging (Komut Dosyası Bloğu Günlük Tutmayı Aç)
PowerShell komutlarının ve komut dosyalarının içeriğini kaydeder
Güvenlik denetimi ve sorun giderme için kullanılır

3.Turn on Script Execution (Komut Dosyası Çalıştırmayı Aç)
PowerShell betiklerinin (.ps1) çalışmasını kontrol eder
Çift tıklayıp "Enabled" yapmanız gerekiyor

4.Turn on PowerShell Transcription (PowerShell Transkripsiyonunu Aç)
PowerShell oturumlarının tam metin kaydını tutar
Tüm girdi ve çıktıları dosyaya yazar

5.Set the default source path for Update-Help (Update-Help için varsayılan kaynak yolunu ayarla)
PowerShell yardım dosyalarının nereden güncelleneceğini belirler

Tüm ayarlarım durumu şu anda "Yapılandırılmadı" (Not Configured) olarak görünmektedir.

TRWE_2012
Kullanıcı avatarı
Kayserilifatih
Exabyte1
Exabyte1
Mesajlar: 10502
Kayıt: 30 Ağu 2024, 20:48
cinsiyet: Erkek
Teşekkür etti: 979 kez
Teşekkür edildi: 7850 kez

Re: Powershel hatası

Mesaj gönderen Kayserilifatih »

burak35 yazdı: 06 Eyl 2026, 14:27 ilginç bi şekilde bende powershell çalışıyo. ama herhangi bir birleşen kaldırmak istediğimde kaldırmıyo. hata veriyo.
ve kendi kendine kapanıyo. bende hiç uğraşmadım. bıraktım. öylece duruyo. nadiren ufak tefek basit işler için kullanıyorum.
En güzeli yani vbscript neyimize yetmiyor, kalkacakmış peh istediği kadar kalksın bende söz namustur çok gerekmedikçe kullanmam dedim mi gene kullanmam mutlaka başka bir yol bulurum alt tarafı bir komut satırı, hiç bu kadar zahmete ve detaya girmeye değmez, başka pratik yollara bakarız ya da hiç kullanmayız olur biter bu yüzden bir kaç arkadaşla sözlü kavga etmişliğim bile vardır yani bana askerde bir arkadaş sigara iç diye ısrar etti ben de içmem tabi alırım o sigarayı ayağımın altında ezer sonra sana o sigarayı içiririm dedim bir daha bana gelip de sigara iç diyemedi :lol:
Cevapla