AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1871608
Accepted
Manu Järvinen
Manu Järvinen
Asked: 2025-01-23 01:17:34 +0800 CST2025-01-23 01:17:34 +0800 CST 2025-01-23 01:17:34 +0800 CST

Como adicionar vários usuários do Windows 11 que têm tremas (Ä, Ö, Å, etc.) em grupos que têm tremas por meio do script PS1 PowerShell?

  • 772

Como adicionar vários usuários do Windows 11 que têm tremas (Ä, Ö, Å, etc.) em grupos que têm tremas por meio do script PS1 PowerShell?

powershell
  • 2 2 respostas
  • 965 Views

2 respostas

  • Voted
  1. Best Answer
    Cpt.Whale
    2025-01-23T05:52:26+08:002025-01-23T05:52:26+08:00

    O PowerShell v5.1 instalado por padrão e os comandos tecnicamente não apresentam problemas com umlouts, então verifique se sua entrada está codificada corretamente:

    Add-LocalGroupMember -Name 'UMLÄUTS' -Member 'Me'
    

    A versão padrão instalada do Powershell (5.1) assume que os arquivos de script e texto são codificados em UTF-8 com BOM por padrão, então você pode ter problemas se os arquivos estiverem em UTF-8 simples (sem BOM). Por exemplo:

    # wrong characters when file is UTF8
    Get-Content 'test_utf8.txt'
    umlauts: Ä Ö Å
    
    # success only when specifying encoding
    Get-Content 'test_utf8.txt' -Encoding UTF8
    umlauts: Ä Ö Å
    

    Para os arquivos de script, você pode recodificá-los assim, e eles deverão ser executados corretamente:

    Get-Content -Path '.\script_utf8.ps1' -Raw -Encoding UTF8 | 
      Set-Content -Path '.\script_utf8_bom.ps1'
    

    O Powershell v6 e versões mais recentes usam UTF-8 simples como padrão neste caso, mas esteja ciente de que você pode encontrar o problema inverso ao executar arquivos com BOM.

    Veja mais detalhes aqui: about_Character_Encoding

    • 6
  2. Manu Järvinen
    2025-01-23T01:17:34+08:002025-01-23T01:17:34+08:00

    Demorou um pouco para realmente testar isso.

    Inclui imagens e scripts para o Windows 11 finlandês , porque usamos tremas aqui, ou "Ääkköset". (Embora eu odeie softwares que não sejam em inglês ou convenções relacionadas a computadores, isso não vem ao caso)

    1. Mais importante: baixe apenas a versão mais recente do PowerShell na Microsoft Store. NÃO use o Windows PowerShell que vem com o Windows 11, ele está desatualizado e não funciona para tremas (eu tentei, mas não adiantou, as tremas vão ficar malucas, como se Käyttäjät virasse Käyttäjät, irritante).

      Baixando o PowerShell normal em vez de usar o Windows PowerShell (que não funciona para tremas)

    2. Aqui está algum material para você começar. O que é importante nos scripts do PS1 é o termo "Käyttäjät" . Que em finlandês significa Usuários ou usuários comuns. Tenho quase certeza de que se você substituir isso pelo termo usado na sua versão localizada do Windows 11, você estará pronto. Por favor, mods SuperUser e especialistas, não editem os scripts encurtando-os ou removendo-os - voltarei a eles se precisar deles novamente. Embora esta mensagem já esteja bem longa.

      Criando usuários para o Windows 11 via script


    Dados_Pessoais_da_Empresa_Com_Umlauts.csv

    (Eles são os nomes finlandeses mais populares gerados automaticamente e que não têm nada a ver com nada.)

    GroupName;UserName;Password
    Tuotanto;Anni Koskinen;Asennus1
    Tuotanto;Kalle Nurmi;Asennus1
    Myynti;Matti Saarinen;Asennus1
    Tuotanto;Helena Koskinen;Asennus1
    Hallinto;Seppo Saarinen;Asennus1
    Hallinto;Tiina Mäkinen;Asennus1
    Myynti;Pekka Niemi;Asennus1
    Varasto;Kaisa Mäkinen;Asennus1
    Ulkoiset;Anni Ahonen;Asennus1
    Harjoittelijat;Tuomas Ahonen;Asennus1
    Harjoittelijat;Pekka Heinonen;Asennus1
    Myynti;Juhani Niemi;Asennus1
    Hallinto;Pekka Lehtonen;Asennus1
    Hallinto;Harri Saarinen;Asennus1
    Myynti;Tuomas Virtanen;Asennus1
    Myynti;Pekka Savolainen;Asennus1
    Tuotanto;Timo Hämäläinen;Asennus1
    

    Adicionar_Todos_os_Usuários_e_Grupos.ps1

    # Define the path to the CSV file
    $csvFile = "C:\Users\Asennus\Desktop\Company_Personnel_Data_With_Umlauts.csv"  # Replace with the actual path to your CSV file
    
    # Import user data from the CSV file (specify semicolon as the delimiter)
    $users = Import-Csv -Path $csvFile -Delimiter ';'
    
    # Keep track of duplicates, created groups, and processed usernames
    $duplicateUsers = @()
    $createdGroups = @()
    $processedUsers = @()
    
    # Ensure the "Käyttäjät" group exists
    if (-not (Get-LocalGroup -Name "Käyttäjät" -ErrorAction SilentlyContinue)) {
        Write-Host "Creating group: Käyttäjät"
        New-LocalGroup -Name "Käyttäjät" -Description "Default user group"
        $createdGroups += "Käyttäjät"
    }
    
    # Check and create groups from the CSV if necessary
    foreach ($group in ($users.GroupName | Sort-Object -Unique)) {
        if (-not (Get-LocalGroup -Name $group -ErrorAction SilentlyContinue)) {
            Write-Host "Creating group: $group"
            New-LocalGroup -Name $group -Description "Group created via script"
            $createdGroups += $group
        }
    }
    
    # Loop through each user in the CSV file
    foreach ($user in $users) {
        # Check if the username has already been processed
        if ($processedUsers -contains $user.UserName) {
            $duplicateUsers += $user.UserName
            continue
        }
    
        # Mark the username as processed
        $processedUsers += $user.UserName
    
        # Check if the user already exists
        $existingUser = Get-LocalUser -Name $user.UserName -ErrorAction SilentlyContinue
        if ($existingUser) {
            # If the user exists, log them as duplicate and skip creation
            $duplicateUsers += $user.UserName
        } else {
            # Create the user
            New-LocalUser -Name $user.UserName -Password (ConvertTo-SecureString $user.Password -AsPlainText -Force) -FullName $user.UserName -Description "User created via script"
        }
    
        # Add user to the "Käyttäjät" group if not already a member
        if (-not (Get-LocalGroupMember -Group "Käyttäjät" -Member $user.UserName -ErrorAction SilentlyContinue)) {
            Add-LocalGroupMember -Group "Käyttäjät" -Member $user.UserName -ErrorAction SilentlyContinue
        }
    
        # Remove the user from all other non-"Käyttäjät" groups
        $existingGroups = Get-LocalGroup | Where-Object {
            (Get-LocalGroupMember -Group $_.Name -ErrorAction SilentlyContinue | Where-Object { $_.Name -eq $user.UserName }) -and
            ($_.Name -ne "Käyttäjät")
        }
    
        foreach ($existingGroup in $existingGroups) {
            Remove-LocalGroupMember -Group $existingGroup.Name -Member $user.UserName -ErrorAction SilentlyContinue
        }
    
        # Add user to the specified group from the CSV
        Add-LocalGroupMember -Group $user.GroupName -Member $user.UserName -ErrorAction SilentlyContinue
    }
    
    # Print summary
    Write-Host "`n--- Script Summary ---"
    if ($createdGroups.Count -gt 0) {
        Write-Host "The following groups were created:" -ForegroundColor Green
        $createdGroups | ForEach-Object { Write-Host "- $_" }
    } else {
        Write-Host "No new groups were created." -ForegroundColor Yellow
    }
    
    if ($duplicateUsers.Count -gt 0) {
        Write-Host "`nThe following duplicate usernames in the CSV were skipped (manual handling required):" -ForegroundColor Yellow
        $duplicateUsers | ForEach-Object { Write-Host "- $_" }
    } else {
        Write-Host "`nNo duplicate usernames were found in the CSV." -ForegroundColor Green
    }
    
    Write-Host "`nAll assignments completed successfully!" -ForegroundColor Green
    

    Remove_All_Those_Users_And_Groups_That_Were_Made_Via_Script.ps1

    # Remove Users with Description "User created via script"
    Write-Host "Searching for users with description 'User created via script'..." -ForegroundColor Yellow
    $localUsers = Get-LocalUser
    $usersToRemove = $localUsers | Where-Object { $_.Description -eq "User created via script" }
    
    if ($usersToRemove.Count -gt 0) {
        Write-Host "The following users will be removed:" -ForegroundColor Yellow
        $usersToRemove | ForEach-Object { Write-Host "- $($_.Name)" }
    
        # Confirm deletion
        $userConfirmation = Read-Host "Type 'YES' to confirm deletion of these users"
        if ($userConfirmation -eq "YES") {
            $usersToRemove | ForEach-Object {
                Write-Host "Removing user: $($_.Name)" -ForegroundColor Red
                Remove-LocalUser -Name $_.Name -ErrorAction SilentlyContinue
            }
            Write-Host "All users with the description 'User created via script' have been removed." -ForegroundColor Green
        } else {
            Write-Host "Operation cancelled. No users were removed." -ForegroundColor Cyan
        }
    } else {
        Write-Host "No users found with the description 'User created via script'." -ForegroundColor Green
    }
    
    # Remove Groups with Description "Group created via script"
    Write-Host "`nSearching for groups with description 'Group created via script'..." -ForegroundColor Yellow
    $localGroups = Get-LocalGroup
    $groupsToRemove = $localGroups | Where-Object { $_.Description -eq "Group created via script" }
    
    if ($groupsToRemove.Count -gt 0) {
        Write-Host "The following groups will be removed:" -ForegroundColor Yellow
        $groupsToRemove | ForEach-Object { Write-Host "- $($_.Name)" }
    
        # Confirm deletion
        $groupConfirmation = Read-Host "Type 'YES' to confirm deletion of these groups"
        if ($groupConfirmation -eq "YES") {
            $groupsToRemove | ForEach-Object {
                Write-Host "Removing group: $($_.Name)" -ForegroundColor Red
                Remove-LocalGroup -Name $_.Name -ErrorAction SilentlyContinue
            }
            Write-Host "All groups with the description 'Group created via script' have been removed." -ForegroundColor Green
        } else {
            Write-Host "Operation cancelled. No groups were removed." -ForegroundColor Cyan
        }
    } else {
        Write-Host "No groups found with the description 'Group created via script'." -ForegroundColor Green
    }
    
    • 5

relate perguntas

  • Como colocar string variável em array no powershell?

  • Powershell e regex: lista de arquivos "backup ao salvar" do Notepad ++. Editar nome, classificar por lastwritetime

  • Adicionando cor de primeiro plano ao perfil do Powershell?

  • Não é possível ativar o Microsoft Print to PDF depois de desativado

  • Posso fazer com que este script do PowerShell aceite vírgulas?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Vickel O Firefox não permite mais colar no WhatsApp web? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve