<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GrafIT Solutions</title>
	<atom:link href="https://grafitsolutions.pl/feed/" rel="self" type="application/rss+xml" />
	<link>https://grafitsolutions.pl</link>
	<description></description>
	<lastBuildDate>Mon, 16 Feb 2026 18:20:43 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://grafitsolutions.pl/wp-content/uploads/2026/02/cropped-grafika_1-32x32.png</url>
	<title>GrafIT Solutions</title>
	<link>https://grafitsolutions.pl</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Ansible w środowisku Windows – jak automatyzować więcej niż tylko Linux</title>
		<link>https://grafitsolutions.pl/ansible-w-srodowisku-windows-jak-automatyzowac-wiecej-niz-tylko-linux/</link>
		
		<dc:creator><![CDATA[grafadm]]></dc:creator>
		<pubDate>Mon, 16 Feb 2026 17:56:47 +0000</pubDate>
				<category><![CDATA[Automatyzacja IT & Skrypty]]></category>
		<category><![CDATA[IT & Administracja systemami]]></category>
		<category><![CDATA[Administracja]]></category>
		<category><![CDATA[Ansible]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Skrypty]]></category>
		<guid isPermaLink="false">https://grafitsolutions.pl/?p=933</guid>

					<description><![CDATA[Wprowadzenie – mit, który trzeba obalić Jeśli padnie hasło Ansible, większość osób myśli:„Linux, serwery aplikacyjne, DevOps – nie Windows”.To jeden...]]></description>
										<content:encoded><![CDATA[


<h2 class="kt-adv-heading933_7dcba2-23 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_7dcba2-23">Wprowadzenie – mit, który trzeba obalić</h2>



<p class="kt-adv-heading933_56b34a-11 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_56b34a-11">Jeśli padnie hasło <strong>Ansible</strong>, większość osób myśli:<br><em>„Linux, serwery aplikacyjne, DevOps – nie Windows”.</em><br>To jeden z <strong>najbardziej szkodliwych mitów w automatyzacji IT</strong>.<br>Prawda jest taka, że:</p>



<ul class="wp-block-list">
<li>Ansible <strong>bardzo dobrze działa z Windows</strong>,</li>



<li>Pozwala zarządzać <strong>wieloma serwerami jednocześnie</strong>,</li>



<li>Idealnie uzupełnia PowerShella, zamiast go zastępować.</li>
</ul>



<p>W tym artykule pokażę:</p>



<ul class="wp-block-list">
<li><strong>Jak wygląda Ansible w środowisku Windows</strong>,</li>



<li>C<strong>o realnie warto nim automatyzować</strong>,</li>



<li><strong>Konkretne playbooki</strong>, które mają sens w firmach.</li>
</ul>



<h2 class="kt-adv-heading933_11a187-a8 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_11a187-a8">Po co Ansible, skoro jest PowerShell?</h2>



<p class="kt-adv-heading933_45679e-43 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_45679e-43">To jedno z najczęstszych pytań.<br><strong>PowerShell:</strong><br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Idealny do <strong>logiki i operacji lokalnych</strong><br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Świetny do <strong>pojedynczych zadań</strong><br><br><strong>Ansible:</strong><br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Idealny do <strong>zarządzania wieloma serwerami</strong><br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Powtarzalność<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Deklaratywność („jak ma być”, a nie „jak to zrobić”)<br><br><strong>Najlepsze efekty daje połączenie PowerShell + Ansible</strong>, a nie wybór jednego narzędzia.</p>



<h2 class="kt-adv-heading933_c05059-ed wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_c05059-ed">Jak Ansible komunikuje się z Windows?</h2>



<p class="kt-adv-heading933_8065e6-df wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_8065e6-df">Ansible <strong>może połączyć się z hostem Windows za pomocą</strong>:</p>



<ul class="wp-block-list">
<li><strong>WinRM</strong> lub <strong>SSH</strong>,</li>



<li>PowerShell po stronie Windows</li>
</ul>



<p class="kt-adv-heading933_a610dc-83 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_a610dc-83">Co to daje?</p>



<ul class="wp-block-list">
<li>Brak instalowania agentów,</li>



<li>Centralne zarządzanie,</li>



<li>Pełną kontrolę nad konfiguracją.</li>
</ul>



<h2 class="kt-adv-heading933_a61178-8d wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_a61178-8d">Przykład 1 – sprawdzanie stanu usług na wielu serwerach</h2>



<h4 class="kt-adv-heading933_957329-30 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_957329-30">Problem</h4>



<p class="kt-adv-heading933_209711-ce wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_209711-ce">Masz:</p>



<ul class="wp-block-list">
<li>Kilka / kilkanaście serwerów,</li>



<li>Te same usługi (np. RDS, SQL, aplikacyjne),</li>



<li>Brak centralnej kontroli.</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="enlighter" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">- name: Sprawdzenie statusu usług
  hosts: windows
  tasks:
    - name: Sprawdź usługę RDP
      win_service:
        name: TermService
      register: rdp_service

    - name: Wyświetl status
      debug:
        msg: "Status usługi RDP: {{ rdp_service.state }}"</pre>



<p class="kt-adv-heading933_1e44c0-9e wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_1e44c0-9e"><strong>Efekt:</strong><br>Jednym poleceniem widzisz status usługi na <strong>wszystkich serwerach</strong>.</p>



<h2 class="kt-adv-heading933_629ec7-ca wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_629ec7-ca">Przykład 2 – instalacja oprogramowania na Windows Server</h2>



<h4 class="kt-adv-heading933_629ec7-ca wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_629ec7-ca">Problem</h4>



<p class="kt-adv-heading933_629ec7-ca wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_629ec7-ca">Ręczna instalacja:</p>



<ul class="wp-block-list">
<li>Niespójne wersje,</li>



<li>Różne ustawienia,</li>



<li>Chaos.</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="enlighter" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">- name: Instalacja 7-Zip
  hosts: windows
  tasks:
    - name: Zainstaluj 7-Zip
      win_chocolatey:
        name: 7zip
        state: present</pre>



<h2 class="kt-adv-heading933_1cd888-9f wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_1cd888-9f">Przykład 3 – zarządzanie plikami i konfiguracją</h2>



<h4 class="kt-adv-heading933_72dcfc-6a wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_72dcfc-6a">Scenariusz</h4>



<p class="kt-adv-heading933_629ec7-ca wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_629ec7-ca">Chcesz:</p>



<ul class="wp-block-list">
<li>Skopiować plik konfiguracyjny,</li>



<li>Ustawić prawa,</li>



<li>Mieć pewność, że konfiguracja jest identyczna.</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="enlighter" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">- name: Kopiowanie pliku konfiguracyjnego
  hosts: windows
  tasks:
    - name: Skopiuj plik
      win_copy:
        src: files/app.config
        dest: C:\App\app.config</pre>



<h2 class="kt-adv-heading933_ba65e7-35 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_ba65e7-35">Dlaczego Ansible świetnie sprawdza się w firmach?</h2>



<ul class="wp-block-list">
<li>Jedno źródło prawdy (playbook),</li>



<li>Łatwa dokumentacja,</li>



<li>Szybkie onboardowanie nowego admina,</li>



<li>Skalowalność bez chaosu.</li>
</ul>



<h2 class="kt-adv-heading933_6c461e-81 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading933_6c461e-81">Podsumowanie</h2>



<ul class="wp-block-list">
<li>Ansible <strong>nie jest tylko dla Linuxa</strong></li>



<li>Idealnie nadaje się do środowisk Windows</li>



<li>PowerShell + Ansible = pełna kontrola i skala</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>5 skryptów PowerShell, które realnie oszczędzają czas administratora IT</title>
		<link>https://grafitsolutions.pl/5-skryptow-powershell-ktore-realnie-oszczedzaja-czas-administratora-it/</link>
		
		<dc:creator><![CDATA[grafadm]]></dc:creator>
		<pubDate>Mon, 16 Feb 2026 17:42:21 +0000</pubDate>
				<category><![CDATA[Automatyzacja IT & Skrypty]]></category>
		<category><![CDATA[IT & Administracja systemami]]></category>
		<category><![CDATA[Administracja]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Skrypty]]></category>
		<guid isPermaLink="false">https://grafitsolutions.pl/?p=922</guid>

					<description><![CDATA[Wprowadzenie – PowerShell nie musi być „rocket science” PowerShell często kojarzy się z: Tymczasem największą wartość dają krótkie, proste skrypty,...]]></description>
										<content:encoded><![CDATA[


<h2 class="kt-adv-heading922_c75caf-c2 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_c75caf-c2">Wprowadzenie – PowerShell nie musi być „rocket science”</h2>



<p class="kt-adv-heading922_011a34-25 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_011a34-25">PowerShell często kojarzy się z:<br><br><br><br><br><br></p>



<ul class="wp-block-list">
<li>Długimi skryptami,</li>



<li>Skomplikowaną logiką,</li>



<li>„Czasem to napiszę, jak będę miał czas”.,</li>
</ul>



<p>Tymczasem <strong>największą wartość dają krótkie, proste skrypty</strong>, które:</p>



<ul class="wp-block-list">
<li>Rozwiązują jeden problem,</li>



<li>Można odpalić w każdej chwili,</li>



<li>Eliminują ręczne klikanie.</li>
</ul>



<p>Poniżej znajdziesz <strong>5 skryptów</strong>, które w realnych środowiskach:</p>



<ul class="wp-block-list">
<li>Oszczędzają godziny pracy,</li>



<li>Zmniejszają liczbę błędów,</li>



<li>Poprawiają bezpieczeństwo.</li>
</ul>



<h2 class="kt-adv-heading922_990c51-87 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_990c51-87">Szybki raport użytkowników z wygasającym hasłem</h2>



<h4 class="kt-adv-heading922_be89eb-60 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_be89eb-60">Problem</h4>



<p class="kt-adv-heading922_9f5a7f-b8 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_9f5a7f-b8">Użytkownicy zgłaszają się <strong>dopiero wtedy</strong>, gdy nie mogą się zalogować.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="enlighter" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Search-ADAccount -PasswordExpiring |
Select Name, SamAccountName, PasswordLastSet |
Sort PasswordLastSet</pre>



<p class="kt-adv-heading922_7f8c70-281 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_7f8c70-281">Co zyskujesz?</p>



<ul class="wp-block-list">
<li>Reakcję zanim będzie problem</li>



<li>Mniej telefonów do IT</li>



<li>Możliwość automatyzacji maili</li>
</ul>



<h2 class="kt-adv-heading922_69a27c-88 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_69a27c-88">Lista nieaktywnych użytkowników w Active Directory</h2>



<h4 class="kt-adv-heading922_9b891c-d7 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_9b891c-d7">Problem</h4>



<p class="kt-adv-heading922_e7201d-20 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_e7201d-20">Nieaktywne konta = ryzyko bezpieczeństwa.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="enlighter" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Get-ADUser -Filter * -Properties LastLogonDate |
Where-Object {
    $_.Enabled -eq $true -and
    $_.LastLogonDate -lt (Get-Date).AddDays(-90)
} |
Select Name, SamAccountName, LastLogonDate</pre>



<p class="kt-adv-heading922_90e698-7a wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_90e698-7a">Zastosowanie</p>



<ul class="wp-block-list">
<li>Audyty,</li>



<li>Porządki w AD,</li>



<li>Podstawa do dezaktywacji kont.</li>
</ul>



<h2 class="kt-adv-heading922_fae5c1-662 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_fae5c1-662">Sprawdzenie stanu usług na serwerze</h2>



<h4 class="kt-adv-heading922_e7beff-253 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_e7beff-253">Problem</h4>



<p class="kt-adv-heading922_c7e1f5-3a4 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_c7e1f5-3a4">„Coś nie działa, ale nie wiadomo co”.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="enlighter" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Get-Service |
Where-Object { $_.Status -ne "Running" } |
Select Name, Status</pre>



<h2 class="kt-adv-heading922_149ea6-f95 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_149ea6-f95">Raport wolnego miejsca na dyskach (lokalnie lub zdalnie)</h2>



<h4 class="kt-adv-heading922_221896-d66 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_221896-d66">Problem</h4>



<p class="kt-adv-heading922_410e5a-c07 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_410e5a-c07">Brak miejsca = awarie aplikacji, bazy, backupów.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="enlighter" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3" |
Select DeviceID,
@{Name="Free(GB)";Expression={[math]::Round($_.FreeSpace/1GB,2)}},
@{Name="Size(GB)";Expression={[math]::Round($_.Size/1GB,2)}}</pre>



<h2 class="kt-adv-heading922_c2ddcb-31 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_c2ddcb-31">Szybki reset hasła + odblokowanie konta</h2>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="enlighter" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$User = "jkowalski"
$Password = ConvertTo-SecureString "TempP@ss123!" -AsPlainText -Force

Set-ADAccountPassword -Identity $User -Reset -NewPassword $Password
Unlock-ADAccount -Identity $User
Set-ADUser -Identity $User -ChangePasswordAtLogon $true</pre>



<h2 class="kt-adv-heading922_564778-b0 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_564778-b0">Dlaczego te skrypty mają sens?</h2>



<ul class="wp-block-list">
<li>Rozwiązują <strong>realne problemy</strong>,</li>



<li>Można je odpalić „na gorąco”,</li>



<li>Są bazą do dalszej automatyzacji (harmonogram, Ansible, monitoring).</li>
</ul>



<h2 class="kt-adv-heading922_564778-b0 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading922_564778-b0">Podsumowanie</h2>



<ul class="wp-block-list">
<li>PowerShell nie musi być skomplikowany</li>



<li>Największą wartość dają krótkie, praktyczne skrypty</li>



<li>Automatyzacja zaczyna się od małych kroków</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Automatyzacja zadań administracyjnych w Windows Server za pomocą PowerShell – praktyczne przykłady</title>
		<link>https://grafitsolutions.pl/jak-wdrozyc-mfa-w-windows-server-2022-2/</link>
		
		<dc:creator><![CDATA[grafadm]]></dc:creator>
		<pubDate>Mon, 16 Feb 2026 13:00:23 +0000</pubDate>
				<category><![CDATA[Automatyzacja IT & Skrypty]]></category>
		<category><![CDATA[IT & Administracja systemami]]></category>
		<category><![CDATA[Administracja]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Skrypty]]></category>
		<guid isPermaLink="false">https://grafitsolutions.pl/?p=859</guid>

					<description><![CDATA[Wprowadzenie – dlaczego administratorzy tracą czas? Każdy administrator Windows zna ten scenariusz: Problem nie polega na braku narzędzi.Problem polega na...]]></description>
										<content:encoded><![CDATA[


<h2 class="kt-adv-heading859_8963cf-8a wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_8963cf-8a">Wprowadzenie – dlaczego administratorzy tracą czas?</h2>



<p>Każdy administrator Windows zna ten scenariusz:</p>



<ul class="wp-block-list">
<li>To samo klikanie w konsoli,</li>



<li>Te same konta użytkowników,</li>



<li>Te same raporty,</li>



<li>Te same „szybkie” zadania, które powtarzają się codziennie.</li>
</ul>



<p>Problem nie polega na braku narzędzi.<br>Problem polega na tym, że <strong>PowerShell jest wciąż wykorzystywany tylko w kilkudziesięciu % swojego potencjału</strong>.</p>



<p>W tym artykule pokażę:</p>



<ul class="wp-block-list">
<li><strong>Dlaczego automatyzacja to nie luksus, tylko konieczność</strong> w nowoczesnym IT.</li>



<li><strong>Jakie zadania warto automatyzować jako pierwsze</strong>.</li>



<li><strong>Konkretne, realne skrypty</strong>.</li>
</ul>



<h2 class="kt-adv-heading859_f82e2b-73 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_f82e2b-73">Co naprawdę warto automatyzować w Windows Server?</h2>



<p class="kt-adv-heading859_2e9399-53 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_2e9399-53">Nie wszystko warto automatyzować. Największy sens mają zadania:</p>



<ul class="wp-block-list">
<li>Powtarzalne,</li>



<li>Podatne na błędy ludzkie,</li>



<li>Wykonywane &#8222;na szybko&#8221;,</li>
</ul>



<p class="kt-adv-heading859_ed2b76-7e wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_ed2b76-7e">Najlepsi kandydaci:</p>



<ul class="wp-block-list">
<li>Tworzenie i modyfikacja kont AD,</li>



<li>Reset haseł,</li>



<li>Raporty (AD, dyski, usługi),</li>



<li>Sprawdzanie stanu serwerów,</li>



<li>Backup konfiguracji.</li>
</ul>



<h2 class="kt-adv-heading859_bfb291-b6 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_bfb291-b6">Przykład 1 – automatyczne tworzenie użytkownika w Active Directory</h2>



<h4 class="kt-adv-heading859_2c254c-e1 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_2c254c-e1">Problem</h4>



<p class="kt-adv-heading859_dd6d60-c0 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_dd6d60-c0">Ręczne tworzenie kont:</p>



<ul class="wp-block-list">
<li>Trwa,</li>



<li>Bywa niespójne,</li>



<li>Generuje błędy (OU, grupy, nazwy).</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="enlighter" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$UserData = @{
    Name              = "Jan Kowalski"
    GivenName         = "Jan"
    Surname           = "Kowalski"
    SamAccountName    = "jkowalski"
    UserPrincipalName = "jkowalski@firma.local"
    Path              = "OU=Users,DC=firma,DC=local"
    AccountPassword   = (ConvertTo-SecureString "TempP@ss123!" -AsPlainText -Force)
    Enabled           = $true
}

New-ADUser @UserData
Add-ADGroupMember -Identity "Pracownicy" -Members "jkowalski"</pre>



<p class="kt-adv-heading859_0a1ae9-e7 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_0a1ae9-e7">Co zyskujesz?</p>



<ul class="wp-block-list">
<li>Spójność kont,</li>



<li>Oszczędność czasu,</li>



<li>Możliwośc dalszej automatyzacji (CSV, formularze).</li>
</ul>



<h2 class="kt-adv-heading859_5afb7c-5c wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_5afb7c-5c">Przykład 2 – raport wolnego miejsca na dyskach serwerów</h2>



<h4 class="kt-adv-heading859_8be6e8-1a wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_8be6e8-1a">Problem</h4>



<p class="kt-adv-heading859_4335ed-7a wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_4335ed-7a">„Kończy się miejsce, ale nikt nie zauważył”.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="enlighter" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Get-PSDrive -PSProvider FileSystem |
Select-Object Name,
    @{Name="Used(GB)";Expression={[math]::round(($_.Used/1GB),2)}},
    @{Name="Free(GB)";Expression={[math]::round(($_.Free/1GB),2)}} |
Where-Object { $_."Free(GB)" -lt 20 }</pre>



<h2 class="kt-adv-heading859_52a7f9-85 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_52a7f9-85">Przykład 3 – automatyczny reset hasła i wymuszenie zmiany</h2>



<h4 class="kt-adv-heading859_37dc3c-de wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_37dc3c-de">Scenariusz</h4>



<p class="kt-adv-heading859_0fb2a0-35 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_0fb2a0-35">Użytkownik dzwoni:<br>„Nie mogę się zalogować, hasło nie działa”.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="enlighter" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Set-ADAccountPassword -Identity "jkowalski" -Reset `
-NewPassword (ConvertTo-SecureString "NoweP@ss123!" -AsPlainText -Force)

Set-ADUser -Identity "jkowalski" -ChangePasswordAtLogon $true
Unlock-ADAccount -Identity "jkowalski"</pre>



<h2 class="kt-adv-heading859_b03383-6c wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_b03383-6c">Dlaczego automatyzacja to realne bezpieczeństwo?</h2>



<p class="kt-adv-heading859_6625a2-2c wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_6625a2-2c">Automatyzacja to nie tylko wygoda:</p>



<ul class="wp-block-list">
<li>Mniej błędów ludzkich,</li>



<li>Lepsza powtarzalność,</li>



<li>Łatwiejsze audyty,</li>



<li>Prostsze odtwarzanie konfiguracji</li>
</ul>



<p>W środowiskach, które obsługuję, <strong>automatyzacja często zapobiegła realnym incydentom</strong>, zanim użytkownik zdążył je zauważyć.</p>



<h2 class="kt-adv-heading859_918a88-30 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_918a88-30">Jak zacząć automatyzację bez „przepalenia tematu”?</h2>



<p class="kt-adv-heading859_16ce44-ef wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_16ce44-ef"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Zacznij od <strong>jednego problemu</strong><br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Dokumentuj skrypty<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Testuj na środowisku testowym<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Buduj bibliotekę skryptów<br>PowerShell nie musi być „wielkim projektem”.<br>Najlepsze automaty powstają z <strong>małych usprawnień</strong>.</p>



<h2 class="kt-adv-heading859_e75b9b-ab wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading859_e75b9b-ab">Podsumowanie</h2>



<ul class="wp-block-list">
<li>PowerShell to fundament automatyzacji w Windows Server</li>



<li>Największą wartość dają proste, powtarzalne skrypty</li>



<li>Automatyzacja = czas + bezpieczeństwo + skalowalność</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> W kolejnym artykule pokażę <strong>5 gotowych skryptów PowerShell</strong>, które realnie oszczędzają czas administratora.</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Jak wdrożyć MFA w Windows Server 2022</title>
		<link>https://grafitsolutions.pl/jak-wdrozyc-mfa-w-windows-server-2022/</link>
		
		<dc:creator><![CDATA[grafadm]]></dc:creator>
		<pubDate>Sun, 15 Feb 2026 19:40:56 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Administracja]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Skrypty]]></category>
		<guid isPermaLink="false">https://grafitsolutions.pl/?p=816</guid>

					<description><![CDATA[Wprowadzenie W tym wpisie pokażę, jak wdrożyć MFA w środowisku Windows Server 2022, krok po kroku, wraz z przykładami konfiguracji...]]></description>
										<content:encoded><![CDATA[


<h2 class="kt-adv-heading816_ed3a2a-47 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading816_ed3a2a-47">Wprowadzenie</h2>



<p>W tym wpisie pokażę, jak wdrożyć MFA w środowisku Windows Server 2022, krok po kroku, wraz z przykładami konfiguracji PowerShell.</p>



<h2 class="kt-adv-heading816_fe8a0f-5b wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading816_fe8a0f-5b">Opis problemu</h2>



<h2 class="kt-adv-heading816_3a95af-63 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading816_3a95af-63">Rozwiązanie / krok po kroku</h2>



<h4 class="kt-adv-heading816_6d9ecc-c3 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading816_6d9ecc-c3">Krok 1. Instalacja modułu Powershell</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="godzilla" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Install-Module -Name MSOnline</pre>



<h4 class="kt-adv-heading816_31f2d9-05 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading816_31f2d9-05">Krok 2. Konfiguracja MFA dla użytkownika:</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="godzilla" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Włącz MFA dla użytkownika
Set-MsolUser -UserPrincipalName jan.kowalski@firma.pl -StrongAuthenticationRequirements @(@{RelyingParty="*";State="Enabled"})</pre>



<h4 class="kt-adv-heading816_9309c5-4a wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading816_9309c5-4a">Krok 3. Weryfikacja ustawień:</h4>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="godzilla" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Get-MsolUser -UserPrincipalName jan.kowalski@firma.pl | Select DisplayName,StrongAuthenticationRequirements</pre>



<h2 class="kt-adv-heading816_8a869c-21 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading816_8a869c-21">Dodatkowe wskazówki</h2>



<ul class="wp-block-list">
<li>Zawsze testuj skrypty w środowisku testowym.</li>



<li>Loguj zmiany w pliku CSV dla audytu:</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="godzilla" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Get-MsolUser | Export-Csv C:\backup\MFAUsers.csv -NoTypeInformation</pre>



<h2 class="kt-adv-heading816_6f1b03-39 wp-block-kadence-advancedheading" data-kb-block="kb-adv-heading816_6f1b03-39">Podsumowanie</h2>



<ul class="wp-block-list">
<li>MFA zwiększa bezpieczeństwo kont użytkowników.</li>



<li>PowerShell pozwala na automatyzację konfiguracji dla wielu kont jednocześnie.</li>



<li>Dokumentuj zmiany dla bezpieczeństwa i audytów.</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
