Recentemente instalei o Windows Terminal Preview e já fiz o wt.exe abri-lo . Agora quero que ele abra ao iniciar o powershell.exe no Menu Iniciar, na caixa de diálogo Executar ou na barra de endereços do Windows Explorer.
Como configurar isso?
Recentemente instalei o Windows Terminal Preview e já fiz o wt.exe abri-lo . Agora quero que ele abra ao iniciar o powershell.exe no Menu Iniciar, na caixa de diálogo Executar ou na barra de endereços do Windows Explorer.
Como configurar isso?
Estou tentando capturar e limpar a saída do -WhatIf
parâmetro no powershell para uma operação de renomeação de arquivo. O objetivo é remover algumas partes da saída, mas mesmo depois de várias tentativas, não consegui fazer funcionar. Abaixo estão os métodos que tentei:
Set-Location "C:\Path\To\Directory"
$Replace1 = 'Item: C:\Path\To\Directory\'
$Replace2 = 'What if: Performing the operation `"Rename File`" on target'
$Replace3 = 'Destination: C:\Path\To\Directory\'
$VarIvExp = "GCI -Path . -Filter *.pdf | Ren -New { `$_.Name -replace ' ', '_' -replace '-', '_' } -Whatif ;"
# Various attempts to capture and replace parts of the output:
Invoke-Expression $VarIvExp | % { ($_ 3>&1).Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'') }
Invoke-Expression $VarIvExp.ToString() | % { ($_ 3>&1).Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'') }
Invoke-Expression $VarIvExp 3>&1 | % { $_.ToString().Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'') }
Invoke-Expression $VarIvExp.ToString() | % { ($_.ToString() 3>&1).Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'') }
Invoke-Expression $VarIvExp.ToString() | % { $_ | out-string -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
Invoke-Expression $VarIvExp | % { $_.ToString() | -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
Invoke-Expression $VarIvExp 3>&1 | % { $_ | out-string -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
Invoke-Expression $VarIvExp.ToString() | % { $_ | -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
Invoke-Expression $VarIvExp | % { $_.ToString() | -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'' }
What if: Performing the operation "Rename File" on target "Item: C:\Path\To\Directory\SomeText I nº 001-SMSCBMRJ-20250222.pdf" Destination: C:\Path\To\Directory\SomeText__I_nº_001_SMSCBMRJ_20250222.pdf
What if: Performing the operation "Rename File" on target "Item: C:\Path\To\Directory\SomeText I nº 002-SMSCBMRJ-20250222.pdf" Destination: C:\Path\To\Directory\SomeText__I_nº_002_SMSCBMRJ_20250222.pdf
What if: Performing the operation "Rename File" on target "Item: C:\Path\To\Directory\SomeText II nº 001-SMSCBMRJ-20250222.pdf" Destination: C:\Path\To\Directory\SomeText_II_nº_001_SMSCBMRJ_20250222.pdf
What if: Performing the operation "Rename File" on target "Item: C:\Path\To\Directory\SomeText II nº 002-SMSCBMRJ-20250222.pdf" Destination: C:\Path\To\Directory\SomeText_II_nº_002_SMSCBMRJ_20250222.pdf
Nota .: Também tentei várias manipulações diretamente em $Results
, mas sem sucesso. Abaixo estão as tentativas com $Results
...$Results.Replace('various attempts','')
Set-Location "C:\Path\To\Directory"
$Replace1 = 'Item: C:\Path\To\Directory\'
$Replace2 = 'What if: Performing the operation `"Rename File`" on target'
$Replace3 = 'Destination: C:\Path\To\Directory\'
$VarIvExp = "GCI -Path . -Filter *.pdf | Ren -New { `$_.Name -replace ' ', '_' -replace '-', '_' } -Whatif ;"
$Results = Invoke-Expression $VarIvExp
$Results = Invoke-Expression $VarIvExp.Replace( -Replace $Replace1,'' -Replace $Replace2,'' -Replace $Replace3,'')
$Results.ToString().Replace($Replace1,'').Replace($Replace2,'').Replace($Replace3,'')
SomeText I nº 001-SMSCBMRJ-20250222.pdf SomeText__I_nº_001_SMSCBMRJ_20250222.pdf
SomeText I nº 002-SMSCBMRJ-20250222.pdf SomeText__I_nº_002_SMSCBMRJ_20250222.pdf
SomeText II nº 001-SMSCBMRJ-20250222.pdf SomeText_II_nº_001_SMSCBMRJ_20250222.pdf
SomeText II nº 002-SMSCBMRJ-20250222.pdf SomeText_II_nº_002_SMSCBMRJ_20250222.pdf
Por que qualquer um deles retornaria três itens:
gci C:\tools\* -filter b*.jar -recurse |select fullname
gci C:\tools\b* -filter b*.jar -recurse |select fullname
gci C:\tools\briss-* -filter b*.jar -recurse |select fullname
gci C:\tools\briss-2* -filter b*.jar -recurse |select fullname
gci C:\tools\briss-2.* -filter b*.jar -recurse |select fullname
gci C:\tools\briss-2.0* -filter b*.jar -recurse |select fullname
FullName
--------
C:\tools\Briss-2.0\lib\bcmail-jdk15-1.46.jar
C:\tools\Briss-2.0\lib\bcprov-jdk15-1.46.jar
C:\tools\Briss-2.0\lib\Briss-2.0.jar
mas qualquer um deles retorna apenas um:
gci C:\tools\br* -filter b*.jar -recurse | select fullname
gci C:\tools\bri* -filter b*.jar -recurse | select fullname
gci C:\tools\bris* -filter b*.jar -recurse | select fullname
gci C:\tools\briss* -filter b*.jar -recurse | select fullname
FullName
--------
C:\tools\Briss-2.0\lib\Briss-2.0.jar
Achei que sabia alguma coisa sobre o PowerShell, mas isso não faz sentido.
Admito uma presunção: removi uma seção do caminho na minha colagem acima para torná-lo mais curto. Não vejo razão para que isso faça diferença. Aqui está uma captura de tela do efeito real:
Nota: Eu não redigitei o primeiro comando gci, apenas o relembrei e adicionei o "r" no caminho. Além disso, o caminho não está digitado errado porque usei a conclusão de tabulação.
Eu estava testando algo para incluir em um script, mas isso não faz parte de um script. Notei isso no Win11, mas repeti em uma VM Win10 limpa. Se você usar o Chocolatey e instalar o Briss, deverá obter exatamente a mesma estrutura de pastas para testar isso você mesmo.
Os scripts do PowerShell que escrevo precisam ser o mais compatíveis possível, então, ao verificar estados de coisas, sempre prefiro consultar um enum ( 4
) em vez de uma string ( Enabled
). Em 99% dos casos, o valor da string permanece consistente mesmo em versões localizadas do Windows, mas sempre haverá um dispositivo em que ele não é, e será aquele que executará meu script e me colocará em apuros. Isso é bom, desde que eu saiba para onde os enums mapeiam, mas obter essa informação é como arrancar dentes.
Exemplo: Serviços
Pesquisar no Google por "service state enum powershell" leva você até aqui , onde você pode ver uma tabela bacana listando os valores para o estado de um serviço que se alinha ao valor que você obtém ao executar (get-service 'xyz').status.value__
. Isso me permite dizer
if ($value -eq 1)
ao contrário de if ($value -eq 'enabled')
, que é uma comparação muito mais robusta.
Novamente, tudo bem , se você souber os termos para pesquisar .
A pergunta real
Existe algum comando do PowerShell ou um site que eu possa usar para listar essas value__
enumerações? No momento, estou tentando encontrar a enumeração para o state
valor get-WindowsOptionalFeature
e não estou obtendo nada. Certamente não é para ser esse tiro disperso? Sou autodidata, então espero que haja algum repositório dessas coisas que são de conhecimento comum e que eu apenas ignorei.
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?
Tenho uma estrutura de pastas como esta:
D:\fold1
subfold1
subfold2
file1
file2
D:\fold2
subfold_1
subfold_2
D:\fold3
subfold_a
subsubfold_i
subsubfold_ii
file_a
file_b
D:\fold4 [empty folder]
Gostaria de manter fold1, fold2, fold3, fold4 e excluir qualquer subpasta e/ou arquivo que eles contenham.
Para um pequeno número de pastas de primeiro nível (fold1, fold2 etc.), eu poderia usar o File Explorer, clicar em fold1 e então Ctrl+A em seu conteúdo -> Delete. O mesmo para fold2, fold3 etc. No entanto, há mais de 600 pastas de primeiro nível e levaria uma eternidade para fazer isso dessa forma.
Acho que o powershell é a chave, mas não tenho a mínima ideia da sintaxe.
Alguém pode me ajudar, por favor?
No PowerShell >= 5.1
Eu entendo:
PS C:\> get-service -Status Running
Get-Service: A parameter cannot be found that matches parameter name 'Status'
Mas a propriedade existe mesmo assim?
PS C:\> get-service | Get-Member
O instalador do PowerShell está me dando o código de erro 2203 no Windows 10. Minhas permissões estão configuradas corretamente. O que mais pode estar causando esse erro?
Se você fizer qualquer modificação nas regras do firewall do GPO Windows com o módulo Powershell NetSecurity usando o comando eg New-NetFirewallRule
ou Set-NetFirewallRule
as alterações não serão aplicadas imediatamente. Só consegui fazer isso fazendo alguma alteração na GUI do MMC depois (o que parece recarregá-la) ou reiniciando o computador.
Pode ser possível usar a API FwPolicy2 do Firewall do Windows ou a ferramenta cmdline legada, netsh
mas eu preferiria fazer isso com o módulo NetSecurity, se possível?