Estou tentando usar um script para
- desmapear uma unidade
- limpe as credenciais em cache usadas para mapear essa unidade
- mapeie a unidade novamente usando credenciais de usuário diferentes.
No Windows 7, o seguinte script funcionou para mim
@echo off
net use Z: /delete /y >nul
net stop LanmanWorkstation /y >nul
net start LanmanWorkstation >nul
timeout 1 >nul
net use Z: \\path\to\directory
Este script destina-se a desmontar o que está mapeado para Z. Em seguida, limpe as credenciais armazenadas em cache usadas para montar z. Em seguida, remapeie a unidade usando as credenciais de outro usuário.
Quando executo isso no Windows 10, os erros net stop e net start lançam erros de acesso negado. Tentei criar um atalho do script e configurar o atalho para sempre ser executado como administrador, mas esta opção está esmaecida na minha caixa, provavelmente pelas configurações de política de grupo.
Estou tentando encontrar uma maneira de obter essa mesma solução de desmapeamento/mapeamento e atualmente estou explorando opções concedidas através do PowerShell. Minha tentativa atual no PowerShell está usando
mount -Name "z" -PSProvider filesystem -Root "\\path\to\directory" -Persist
O mapa precisa ser persistente para que a unidade apareça no Windows Explorer. Este comando funciona como deveria quando eu o executo no PowerShell, mas clicar duas vezes no arquivo para executá-lo não mapeia a unidade, provavelmente devido a problemas de acesso. Sou novo no PowerShell e ainda estou aprendendo, então não conheço todas as opções disponíveis para mim. Alguém sabe uma maneira de conseguir o efeito que estou buscando?
Responder1
Veja abaixo ---
Limpar cache de credenciais do Windows
O utilitário para excluir credenciais em cache é difícil de encontrar. Ele armazena dados de certificados e também senhas de usuários.
Abra um prompt de comando ou digite o seguinte no comando de execução
rundll32.exe keymgr.dll,KRShowKeyMgr
Há também um utilitário de linha de comando:
C:\> cmdkey /?
Cria, exibe e exclui nomes de usuário e senhas armazenados.
Os mapeamentos de unidades são apenas uma dor historicamente. Bem, você sabe... ;-}
O uso da rede não era a única opção, pois você também poderia usar WScript em VBS ou WMIC para fazer isso. Portanto, com certeza o PowerShell pode fazer WMI para isso.
#PSTip Crie uma unidade de rede mapeada usando WScript.Network
Um exemplo de como uma unidade pode ser mapeada pode ser visto aqui:
(New-Object -ComObject WScript.Network).MapNetworkDrive('Z:','\\server\folder')
Isso não mapeará a unidade de forma persistente. Em outras palavras, a unidade desaparecerá após a reinicialização ou quando um usuário fizer logout. Para garantir que o mapeamento da unidade seja persistente, um terceiro argumento deve ser adicionado – um valor booleano definido como verdadeiro:
(New-Object -ComObject WScript.Network).MapNetworkDrive('Z:','\\server\folder',$true)
Usar a opção -persist é a opção do PowerShell para aderência da unidade, mas você também tem os cmdlets Smb, desde a v3.
Get-Command -Name '*smb*'
CommandType Name Version Source
----------- ---- ------- ------
...
Function Get-SmbGlobalMapping 2.0.0.0 SmbShare
Function Get-SmbMapping 2.0.0.0 SmbShare
...
Function Get-SmbShare 2.0.0.0 SmbShare
Function Get-SmbShareAccess 2.0.0.0 SmbShare
....
Function New-SmbMapping 2.0.0.0 SmbShare
...
Function New-SmbShare 2.0.0.0 SmbShare
...
Function Remove-SmbShare 2.0.0.0 SmbShare
...
Function Set-SmbShare 2.0.0.0 SmbShare
...
Veja também: Powershell: mapear/desmapear unidade de rede em um computador remoto
Quanto a isso...
Eu executo no PowerShell, mas clicar duas vezes no arquivo para executá-lo não mapeia a unidade, provavelmente por causa de problemas de acesso.
… não é uma coisa. .ps1 são associados por padrão ao bloco de notas ou outro editor de texto. Isso é intencional. Claro, você pode mudar essa associação, mas não faça isso. Os usuários clicam duas vezes em praticamente qualquer coisa, e isso pode levar a vários problemas reais de segurança/gerenciamento de riscos/operacionalmente para você e sua organização.
Existem maneiras de clicar duas vezes para executar, com/sem permissões elevadas:
- Toda essa coisa de associação, só não faça isso.
- Chame um .ps1 de um arquivo bat/cmd.
Embora eu realmente sempre tenha sentido isso, clicar duas vezes para executar até mesmo para .bat, .vbs, .cmd e eles simplesmente rodarem era uma coisa ruim, muito antes do PowerShell existir. Mesmo assim, a indústria adquiriu esse hábito e, portanto, foi difícil tirar as pessoas dele.
- Crie um atalho personalizado, devidamente configurado para clicar duas vezes para executar.
Exemplo:
# specify the path to your PowerShell script
$ScriptPath = "C:\test\test.ps1"
# create a lnk file
$shortcutPath = [System.IO.Path]::ChangeExtension($ScriptPath, "lnk")
$filename = [System.IO.Path]::GetFileName($ScriptPath)
# create a new shortcut
$shell = New-Object -ComObject WScript.Shell
$scut = $shell.CreateShortcut($shortcutPath)
# launch the script with powershell.exe:
$scut.TargetPath = "powershell.exe"
# skip profile scripts and enable execution policy for this one call
# IMPORTANT: specify only the script file name, not the complete path
$scut.Arguments = "-noprofile -executionpolicy bypass -file ""$filename"""
# IMPORTANT: leave the working directory empty. This way, the
# shortcut uses relative paths
$scut.WorkingDirectory = ""
# optinally specify a nice icon
$scut.IconLocation = "$env:windir\system32\shell32.dll,162"
# save shortcut file
$scut.Save()
# open shortcut file in File Explorer
explorer.exe /select, $ShortcutPath
- Transforme nosso script em um .exe usando esta ferramenta MS PowerShellGallery.com.
PS2EXE-GUI: “Converter” scripts do PowerShell em arquivos EXE com GUI
Então, você tem opções. Qual você escolhe é uma questão de subsídios operacionais, etc.