> ## Documentation Index
> Fetch the complete documentation index at: https://docs.iru.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom Scripts 개요

> Iru Endpoint를 사용하여 관리되는 Mac 및 Windows 컴퓨터에 사용자 지정 스크립트를 배포합니다. 등록 시 또는 일정에 따라 shell, Python, PowerShell 또는 배치 스크립트를 실행합니다.

<Callout icon="list-check" color="#B84A7A" iconType="regular">Custom Scripts는 Mac 컴퓨터와 Windows 컴퓨터에서 사용할 수 있습니다</Callout>

### Custom Script란 무엇입니까?

Iru Endpoint의 사용자 지정 스크립트는 관리되는 기기에서 작업을 자동화하고 설정을 구성합니다. Iru Agent를 사용하여 등록된 기기에 배포하고 실행할 수 있는 일련의 지침이라고 생각하면 됩니다. 사용자 지정 스크립트를 사용하면 기기 설정을 구성하고, 소프트웨어 애플리케이션을 설치하거나 업데이트하고, 유지 관리 작업을 실행하고, 보안 정책을 적용할 수 있습니다. 또한 하드웨어 인벤토리나 시스템 로그와 같은 기기 정보를 수집하는 데에도 사용자 지정 스크립트를 사용할 수 있습니다. 미리 작성되어 정기적으로 유지 관리되는 스크립트 모음은 [GitHub 저장소](https://github.com/kandji-inc/support/tree/main/Scripts)에서 확인할 수 있습니다.

<Tabs>
  <Tab title="Mac">
    <Note>
      Iru Endpoint의 Custom Script Library Item은 다양한 언어로 작성된 스크립트를 배포할 수 있습니다. 그러나 지원팀은 shell, bash, zshell 또는 Python으로 작성된 스크립트의 문제 해결을 가장 잘 지원할 수 있습니다. AppleScript도 지원되는 언어 중 하나에서 호출되는 경우 지원팀이 도움을 드릴 수 있습니다.
    </Note>

    ### Custom Scripts의 작동 방식

    Iru Agent는 등록된 Mac 컴퓨터에서 사용자 지정 스크립트를 실행합니다. 사용자 지정 스크립트는 Mac 컴퓨터의 모든 셸 또는 인터프리터를 지정할 수 있습니다. 셸이나 인터프리터를 지정하지 않으면 기본 셸(/bin/sh)이 사용됩니다. 사용자 지정 스크립트는 항상 root 사용자로 실행됩니다.

    #### 실행 빈도

    배포하려는 스크립트에 따라 매 체크인 시 한 번, 하루에 한 번, 또는 Self Service에서 필요 시 실행할지 지정할 수 있습니다.

    <AccordionGroup>
      <Accordion title="기기당 한 번 설치">
        **기기당 한 번 설치**의 경우 Iru는 해당 기기에서 Library Item이 **Pass**에 도달할 때까지 매 체크인 시 감사 스크립트를 다시 실행합니다. 교정 스크립트가 활성화되어 성공하면 Library Item에 **수정됨**이 표시될 수 있지만, Iru는 **Pass**에 도달할 때까지 이후 체크인에서도 감사 스크립트를 계속 다시 실행합니다.
      </Accordion>

      <Accordion title="Run every 15 min">
        스크립트가 매 체크인 시(약 15분마다) 실행됩니다.
      </Accordion>

      <Accordion title="Run daily">
        스크립트가 이전 실행 시간을 기준으로 24시간마다 실행됩니다.
      </Accordion>

      <Accordion title="Self Service에서 온디맨드 실행">
        스크립트가 자동으로 실행되지 않으며 Self Service에서 선택 항목으로만 제공됩니다. 항목을 실행한 후 **Run** 버튼의 레이블이 **Run again**으로 바뀝니다.
      </Accordion>
    </AccordionGroup>

    <Callout icon="lightbulb" color="#2563EB" iconType="regular">
      Custom Script Library Item은 위의 처음 3가지 시나리오에서도 Self Service를 통해 제공할 수 있습니다.
    </Callout>

    #### 종료 코드 및 출력

    <AccordionGroup>
      <Accordion title="종료 코드 결과">
        감사 스크립트가 코드 **0**으로 종료되면 해당 실행은 **Pass** 상태가 됩니다. 감사 스크립트가 0이 아닌 종료 코드로 종료되면 해당 실행은 **오류** 상태가 됩니다. 실행이 **오류** 상태이면 Iru가 알림을 생성합니다. 자세한 내용은 [Global Alerts](/ko/endpoint/devices/global-alerts) 지원 문서를 참조하십시오.
      </Accordion>

      <Accordion title="스크립트 출력 로깅">
        Stdout 및 Stderr는 스크립트의 감사 정보에 기록되며, 기기 상태 페이지 또는 사용자 지정 스크립트 상태 페이지에서 확인할 수 있습니다.
      </Accordion>
    </AccordionGroup>

    #### 교정

    교정 스크립트를 사용하면 기본 **감사 스크립트**를 시스템 구성이나 애플리케이션 상태를 확인하는 진정한 감사 스크립트로 사용할 수 있습니다. 감사 스크립트가 0이 아닌 종료 코드로 종료되면 해당 실행은 **오류** 상태가 되며, Iru는 교정 스크립트를 실행합니다.

    <Check>
      교정 스크립트가 코드 **0**으로 종료되면 해당 기기의 Library Item 상태는 **수정됨**입니다. 교정 스크립트가 0이 아닌 종료 코드로 종료되면 해당 기기의 Library Item 상태는 **오류**이며, Iru가 알림을 생성합니다. 자세한 내용은 [Global Alerts](/ko/endpoint/devices/global-alerts) 지원 문서를 참조하십시오.
    </Check>

    #### 재시작 옵션

    재시작 옵션을 사용하면 스크립트 실행이 성공한 후 재시작을 강제할 수 있습니다. 이 옵션을 선택하면 사용자는 Iru Agent 메뉴 막대 애플리케이션에서 재시작 타이머를 받습니다. 항목이 Self Service에서 시작된 경우 5분 재시작 타이머가, 체크인 중과 같은 다른 방식으로 시작된 경우 30분 재시작 타이머가 표시됩니다.

    <Tip>
      재시작 옵션은 교정 스크립트 사용 여부에 따라 다르게 작동합니다:

      * [**Remediation** 스크립트](#remediation)를 사용하는 경우 **Remediation** 스크립트가 0으로 종료되면 재시작 카운트다운이 트리거됩니다.
      * **Remediation** 스크립트를 사용하지 *않는* 경우 **Audit** 스크립트가 0으로 종료되면 재시작 카운트다운이 트리거됩니다.
    </Tip>

    #### Liftoff 설정

    Custom Script 하단에서 **Liftoff 설정**을 펼칩니다. 여기에서 **이 Library Item 처리**를 찾을 수 있습니다. 이 설정은 [Iru Liftoff](/ko/endpoint/library/library-items-profiles/configure-the-liftoff-library-item)를 기준으로 스크립트가 설치되는 시점을 선택합니다. Automated Device Enrollment 및 수동 등록에 적용됩니다.

    * **During Liftoff** (기본값): Custom Script가 Liftoff 중에 처리되며, 처리가 완료될 때까지 Liftoff가 완료되지 않습니다. **Liftoff에서 숨기기**를 선택하지 않으면 Install 화면에 표시됩니다.
      * **Liftoff에서 숨기기**: 선택하면 이 Library Item은 Liftoff 중에 계속 처리되지만 Install 화면에는 표시되지 않습니다. 처리되는 동안 Liftoff 화면 하단에 \*\*계속하기 전에 추가로 필요한 구성을 처리하는 중…\*\*라고 표시됩니다. 이 설정은 순서에 영향을 주지 않습니다.
      * **Friendly name** (선택 사항): 지정하면 Liftoff에 Library Item **이름** 대신 이 이름이 표시됩니다. Iru Agent는 체크인 중에 여전히 **이름** 기준으로 Library Item의 순서를 정합니다.
    * **Liftoff 이후**: Custom Script가 Liftoff 중에 처리되지 않으며 Install 화면에 표시되지 않습니다. 이후 에이전트 체크인 시 설치됩니다.

    <Note>
      이 Custom Script가 [Automated Device Enrollment Library Item](/ko/endpoint/enrollment/apple/configuring-apple-enrollment#install-library-items-during-setup-assistant)의 **설정 지원 중에 Library Items 설치**에도 포함되어 있으면 Setup Assistant 중에 계속 설치됩니다. **이 Library Item 처리**은 해당 설치를 변경하지 않습니다.
    </Note>

    ### Custom Script Library Item 추가

    이 Library Item을 Iru Endpoint Library에 추가하려면 [Library 개요](/ko/endpoint/library/library-items-profiles/library-overview) 문서에 설명된 단계를 따르십시오.

    <Steps>
      <Step title="Library Item 이름 지정">
        새 Custom Script Library Item에 **이름**을 지정합니다.
      </Step>

      <Step title="Blueprint에 할당">
        원하는 [Blueprints](/ko/endpoint/getting-started/blueprints-and-library/configuring-blueprints)에 할당합니다.
      </Step>

      <Step title="실행 빈도 선택">
        **실행 빈도**를 선택합니다.
      </Step>

      <Step title="Self Service 구성(선택 사항)">
        선택적으로 스크립트를 **Self Service**에서 사용할 수 있도록 합니다.
      </Step>

      <Step title="감사 스크립트 추가">
        **감사 스크립트** 필드에 스크립트를 붙여넣습니다.
      </Step>

      <Step title="교정 스크립트 추가(선택 사항)">
        선택적으로 **Remediation Script**를 구성하고 붙여넣습니다.
      </Step>

      <Step title="재시작 옵션 구성(선택 사항)">
        원하는 경우 **실행 성공 후 재시작** 확인란을 선택합니다.
      </Step>

      <Step title="Liftoff 설정 구성(선택 사항)">
        **Liftoff 설정**을 펼칩니다. **이 Library Item 처리**의 기본값은 **During Liftoff**입니다. Liftoff가 완료된 후 스크립트를 설치하려면 **Liftoff 이후**를 선택합니다. [Liftoff 설정](#liftoff-settings)을 참조하십시오.
      </Step>

      <Step title="구성 저장">
        **저장**을 선택합니다.
      </Step>
    </Steps>

    ### 관련 문서

    <CardGroup cols={2}>
      <Card title="Library 개요" icon="books" href="/ko/endpoint/library/library-items-profiles/library-overview">
        Library Item을 선별, 생성 및 관리하고 Blueprint에 추가합니다
      </Card>

      <Card title="Blueprint 구성" icon="cog" href="/ko/endpoint/getting-started/blueprints-and-library/configuring-blueprints">
        정책 관리를 위한 기기 Blueprint를 생성하고 구성합니다
      </Card>

      <Card title="Custom Script를 사용하여 Homebrew 배포" icon="apple" href="/ko/endpoint/library/deployment-guides/apple/deploy-homebrew-using-a-custom-script">
        사용자 지정 스크립트를 사용하여 Mac 컴퓨터에 Homebrew를 배포합니다
      </Card>

      <Card title="전역 변수" icon="code" href="/ko/endpoint/library/library-items-profiles/global-variables">
        Iru Endpoint에서 전역 변수를 사용하여 프로필, 스크립트 및 구성 설정에 기기 및 사용자 정보를 동적으로 삽입하는 방법을 알아봅니다.
      </Card>

      <Card title="전역 알림" icon="bell" href="/ko/endpoint/devices/global-alerts">
        Custom Scripts 또는 기타 Library Item에서 문제가 보고될 때 Iru Endpoint가 알림을 표시하는 방식을 구성합니다
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Windows">
    ### Windows Custom Script

    **Windows custom script** Library Item을 사용하면 관리되는 Windows 컴퓨터에서 PowerShell 스크립트를 실행할 수 있습니다. 이 항목을 사용하여 기기 상태를 감사하거나, 교정을 통해 구성을 적용하거나, 기본 제공 Windows 프로필에서 다루지 않는 관리 작업을 수행할 수 있습니다.

    Windows 사용자 지정 스크립트는 감사 및 교정 모델을 지원하므로 규정을 준수하지 않는 상태를 감지하고 자동으로 수정할 수 있습니다.

    ### Windows Custom Scripts Library Item 생성

    <Steps>
      <Step title="Library로 이동">
        **Library**로 이동합니다.
      </Step>

      <Step title="Library Item 추가">
        **Library Item 추가**를 선택합니다.
      </Step>

      <Step title="Windows Custom Script 선택">
        **Windows Custom Script**를 검색하여 선택합니다.
      </Step>

      <Step title="이름 입력">
        설명적인 **이름**을 입력합니다.
      </Step>

      <Step title="상태 확인">
        상태가 **활성**으로 설정되어 있는지 확인합니다.
      </Step>

      <Step title="Blueprint에 할당">
        Library Item을 하나 이상의 **Blueprints**에 할당합니다.
      </Step>
    </Steps>

    ### 스크립트 세부 정보

    **Script details** 섹션에서는 감사 및 교정 스크립트에 대한 설정을 정의합니다.

    #### 감사 스크립트

    **Audit script**는 기기가 원하는 상태인지 판단합니다.

    다음 옵션 중 하나를 사용하여 감사 스크립트를 제공할 수 있습니다:

    * **서명된 스크립트 업로드**
      * 서명된 PowerShell `.ps1` 파일을 업로드합니다.
    * **스크립트 직접 입력**
      * 편집기에 PowerShell 코드를 직접 붙여넣거나 편집합니다.

    <Note>
      감사 스크립트는 기기가 규정을 준수하지 않을 때 0이 아닌 종료 코드로 종료되어야 합니다. 종료 코드 0은 규정 준수를 나타냅니다.
    </Note>

    #### 명령줄 매개변수(선택 사항)

    **Command line parameters** 필드를 사용하면 런타임에 감사 및 교정 스크립트에 인수를 전달할 수 있습니다.

    * 표준 PowerShell 매개변수 구문을 사용합니다.
    * 매개변수는 스크립트 실행 시 추가됩니다.

    예: `-Mode Full -ConfigPath "C:\Config.json"`

    <Tip>
      값을 하드코딩하지 않고 스크립트를 재사용할 수 있도록 하는 데 유용합니다.
    </Tip>

    #### 교정 스크립트(선택 사항)

    **Add remediation script**를 선택하여 교정 작업을 구성합니다.

    * 교정 스크립트는 감사 스크립트가 규정 미준수를 보고할 때만 실행됩니다.
    * 서명된 스크립트를 업로드하거나 교정 로직을 직접 입력할 수 있습니다.
    * 교정 스크립트를 사용하여 구성 드리프트를 수정하거나 설정을 적용합니다.

    <Note>
      교정 스크립트는 문제가 해결된 후 성공적으로 종료되어야 합니다.
    </Note>

    #### 실행 환경

    **Execute in**을 사용하여 스크립트를 실행하는 데 사용할 PowerShell 환경을 선택합니다:

    * **64비트**
    * **32비트**

    **64 bit**는 표준 64비트 PowerShell 환경에서 스크립트를 실행하며 대부분의 Windows 컴퓨터에 권장됩니다.

    <Note>
      스크립트 또는 해당 종속성에 WOW64 호환성이 필요한 경우에만 32 bit를 사용하십시오.
    </Note>

    ### 할당 및 실행

    Library Item을 저장한 후:

    1. **저장**을 선택합니다.
    2. **+ Assign**을 사용하여 하나 이상의 **Blueprints**에 할당합니다.

    스크립트는 기기당 한 번 실행됩니다.

    ### 모범 사례

    * 가능하면 업로드하기 전에 PowerShell 스크립트에 서명하십시오.
    * 감지 로직(감사)과 적용 로직(교정)을 분리하십시오.
    * 광범위하게 배포하기 전에 비프로덕션 기기에서 스크립트를 테스트하십시오.

    ### 관련 문서

    <CardGroup cols={2}>
      <Card title="Microsoft PowerShell 문서" icon="book" href="https://learn.microsoft.com/powershell/">
        Microsoft의 공식 PowerShell 문서
      </Card>

      <Card title="예외에 대한 모든 것(PowerShell)" icon="book" href="https://learn.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-exceptions">
        PowerShell 예외 처리
      </Card>

      <Card title="전역 알림" icon="bell" href="/ko/endpoint/devices/global-alerts">
        Windows Custom Scripts 또는 기타 Library Item에서 문제가 보고될 때 Iru Endpoint가 알림을 표시하는 방식을 구성합니다
      </Card>
    </CardGroup>
  </Tab>
</Tabs>
